2010-01-16 13 views
7

MVP ve MVC arasındaki farkı zaten biliyorum. Daha sonra bir uygulamanın SRS'sini geçtikten sonra, Applcation Architecture olarak alınacak, uygulanacak ve izlenecek bir Fix'e geçiyorum. Anlayışım gereği, 2'den fazla GUI'den aynı İş Mantığını kullanma şansının olduğu MVP'yi seçerdim. Kamu (www) ve Adming (winform) bölümlü bir uygulama için olduğu gibi. Eğer böyle bir şey yoksa ... MVC'yi arayın. Çünkü Fabrika patiklerini daha doğru takip edebiliyorum.MVP (Model View Presenter) veya MVC (Model Görüntüleme Denetleyicisi)

Dualar, Bilmiyorum ama aralarında seçim yapmak zorunda kalırsam sadece kör atış oynadığımı hissediyorum. Bilmem gerek. Sizce bunlar hakkında ne düşünüyorsunuz?

Not: .net ve C# 'yi takip ediyorum. Zihnimde

cevap

17

Model View Controller desen tüm varyasyonları için farklar (MVP, Passive View, Supervising Controller, Görünüm Modeli, etc.) oldukça ince olur. Her şey veriyi kimin işlediği ve verileri kimden alıyor? Hepsi aynı sorunu çözmek için çalışıyorlar, 'u 'dan başka bir şey'dan ayırmaya çalışıyorlar ve çözümler benzer şekilde hepsini yapıyor.

Simplistic MVC: 

+-------+  manipulates data 
| Model |<---------------------+ 
+-------+      | 
    |       | 
    | gets data    | 
    v       | 
+------------+ serves data +------+ 
| Controller |------------->| View | 
+------------+    +------+ 

Simplistic MVP: 

+-------+ 
| Model | 
+-------+ 
    |^
    | | get/manipulates data 
    v | 
+-----------+ serve data +------+ 
| Presenter |-------------->| View | 
|   |<--------------|  | 
+-----------+ tell changes +------+ 

Her ikisi de aynı görünebilir o sınıf hiyerarşisinde benzerler:

görsel açıdan düşünmek zaman esnekliği uygulamadaki benzer olduğunu neredeyse pervasızca açıktır. Bununla birlikte fark, verileri görüntüleme ve manipüle etmenin farklı yollarıdır. Kendi MVC'nizi yuvarlarken, nasıl görünmesi gerektiğinden siz sorumlusunuz.

Hepsi bu kadar önemli değil çünkü hepsi kod parçalarını kendi kendine hizmet veren mantıksal varlıklara ayırma ve kod çoğaltmayı azaltma ilkesine dayanıyor. code coupling low'u tuttuğunuz sürece, sonunda güzel bir şekilde çalışmalıdır. Uygulamanızın mimarisiyle dogmatik olarak sonuçlanmak istiyorsanız sadece önemlidir.

Bu konuda pragmatik olun ve ihtiyaçlarınız için en iyi olanı yapın, çünkü yine de bir miksle sonuçlanacaksınız. Görünümün gereksinimine bağlı olarak varyasyonlar arasında geçiş yapmak "oldukça" kolay olmalıdır. SOLID ilkelerini izleyin ve yapmanız gerekenleri iyi yapmalısınız. (Ayrıca bkz. this about SOLID).

Nasıl yapıldığını görmek için MVC veya MVP çerçeveleri olup olmadığını incelemenizi öneririm.

+0

+ 1..always geldi Northwind veritabanı dayanan MVC here iyi bir referans uygulaması yoktur. –

+0

spoike: cevabınız oldukça açıklayıcı .. Teşekkürler. – Sumeet

1

Burada doğru yolda olduğunuzu düşünüyorum. Web uygulamaları için birden fazla GUI ve MVC'ye sahip uygulamalar için MVP benim genel kılavuzumdur. Eğer bir tanesini yaparsanız, ASP .Net MVC veya Castle'ın MonoRail'i gibi bir çerçeve kullanırdım, çünkü kendi başına tesisat yapmak bir acı olabilir. SQL Server ile cevapları ASCII diyagramlar takdir 2000.

http://nsk.codeplex.com/SourceControl/list/changesets