MVC Vs katmanlı mimari


142

MVC (mimari bir model) ve bir uygulama için n katmanlı bir mimari arasındaki farkın tam olarak ne olduğunu merak ediyordum. Aradım ama basit bir açıklama bulamadım. Ben MVC kavramlar üzerinde biraz naif olabilir, bu yüzden kimse farkı açıklayabilir eğer o zaman harika olurdu.

şerefe

Yanıtlar:


94

N katmanlı mimaride genellikle her katman ağ tarafından ayrılır. IE, sunum katmanı bazı web sunucularındadır, daha sonra iş mantığı için uygulama sunucularını ağ üzerinden yeniden uçurmak için konuşur, daha sonra tekrar ağ üzerinden bir veritabanı sunucusuyla konuşur ve belki de uygulama sunucusu bazı uzak hizmetlere de ( ödeme işleme için Authorize.net deyin).

MVC, bazı uygulamalarda Modeli, Görünümü ve denetleyiciyi temsil etmekten farklı kod bölümlerinin sorumlu olduğu bir programlama tasarım modelidir. Bu iki şey, örneğin Model katmanının veri depolamak ve almak için bir veritabanını çağıran bir iç uygulaması olabileceğinden ilişkilidir. Denetleyici web sunucusunda bulunabilir ve veri almak için uygulama sunucularını uzaktan çağırabilir. MVC, bir uygulamanın mimarisinin nasıl uygulandığının ayrıntılarını soyutlar.

N-katmanı sadece bir uygulamanın fiziksel yapısını ifade eder. MVC tasarımı genellikle N katmanlı bir mimari kullanılarak uygulandığından bu ikisi bazen karıştırılır.


56
N-katmanı aynı zamanda bir tasarım modelidir, 3 katmanlı bir sistem yapmak için 3 sunucuya ihtiyacınız yoktur, aslında, her katmanı kavramsal bir kavramla ayıran tek bir dosya kullanarak n katmanlı bir sistem yapmak mümkündür.
Şubat

6
Katman, temel olarak bir ağ bağlantısı boyunca bir süreçler arası iletişimin oluştuğunu ima eder. Süreç (aynı dosyada olsun) kod tasarım akışının katmanlı bir tasarım yaklaşımı oluşturduğuna katılmıyorum. Tabii ki bu IMHO. "Sunucu", makinenin aynı kutu üzerinde birkaç işlemi çalıştırabileceğini; ve muhtemelen "localhost" ağında bile konuşabilirler.
Zak

2
Tartışılan tüm formatlar 3 katman tasarımına örnektir. Katman ve katman arasındaki farkı karıştırmayın. Fiziksel bir mahcine üzerinde birden fazla katman çalıştırabileceğiniz doğrudur (örneğin, hipervizörler aracılığıyla büyük bir sunucuyu bölüyorsunuz), ancak buradaki nokta, fiziksel bir ağ atlama (örneğin TCP / IP) için N-Tier alütasyonudur. Yerel olarak adlandırılmış yöneltmeler kullanmak daha etkili olur, ancak yine de aynı sistemde çalışırsanız bellek ve işlem gücü için rekabet edersiniz. Bunların tümü, sunum, İş Mantık ve Veri Erişimi ve farklı makinelerde veritabanını izole etmeyi düşünmenin nedenleridir.
Zack Jannsen

1
Herkes bu soruyu okurken diğer cevapları okumak için tavsiye ederim, bu cevap yanlış
keisar

@magallanes, 'Zak' ile git, önce Katman ve Katman arasındaki farkı temizlememiz gerekiyor İşte açıklamanın çok iyi olduğu bir kod projesi
Irf

42

3 katmanlı bir tasarım şöyle olsaydı:

Client <-> Middle <-> Data

MVC bilmece:

     Middle
     ^    |
     |    v
Client <- Data

Anlamında:

  • 3 katmanlı eşdeğerde, katmanlar arasındaki iletişim iki yönlüdür ve her zaman Orta katmandan geçer
  • MVC eşdeğerinde iletişim tek yönlüdür ; her "katman" ın soldaki katman tarafından güncellendiğini ve daha sonra sağdaki "sol" ve "sağ" katmanını güncellediğini söyleyebiliriz

PS Müşteri olacağını Görünüm ve Orta Denetleyici


13
MVC model doğrudan müşteri (görünüm) ile etkileşime girebilir ??? Ben öyle düşünmüyorum!
palAlaa

6
@Alaa, katılıyorum ve bu yüzden veri akışına atıfta bulunduğunu düşünüyorum . Güncelleme: Vikipedi'de yeni kontrol ettim ve Model, Görünümü doğrudan gözlemciler aracılığıyla etkileşime geçirebilir.
geçersiz

1
MVC'de: MVC mimarisi üçgendir: görünüm denetleyiciye güncellemeler gönderir, denetleyici modeli günceller ve görünüm doğrudan modelden güncellenir Üç Katmanda: Üç katmanlı bir mimari, istemci katmanı hiçbir zaman doğrudan veri katmanıyla iletişim kurmaz Üç katmanlı bir modelde tüm iletişim orta katmandan geçmelidir
ketan italiya

1
Burada Middle bir denetleyici ise, o zaman Middle, Client ve Middle arasındaki iletişim, Veriler ans'ta açıklandığı gibi tek yönlü değildir .. Denetleyici verileri modele geçirir ve model güncellenen verileri denetleyiciye geri döndürür ve tarayıcıya döndürür görünümden geçtikten sonra.
Ejderha

30

Bu ne hakkında söylenecek n-katmanlı mimari

İlk bakışta, üç katman MVC (Model View Controller) konseptine benzeyebilir; ancak topolojik olarak farklıdırlar. Üç katmanlı bir mimaride temel kural, istemci katmanının hiçbir zaman doğrudan veri katmanıyla iletişim kurmamasıdır; üç katmanlı bir modelde tüm iletişim ara katman yazılımı katmanından geçmelidir. Kavramsal olarak üç katmanlı mimari doğrusaldır. Ancak, MVC mimarisi üçgen şeklindedir: Görünüm Denetleyiciye güncellemeler gönderir, Denetleyici Modeli günceller ve Görünüm doğrudan Modelden güncellenir.


11
Kulağa hoş geliyor, ama "Görünüm doğrudan Modelden güncelleniyor" inanmıyorum iyi bir fikir. Denetleyiciyi güncellemeler ve ekler için kullanmak mantıklı değil, seçimler ve filtreler için değil ve endişeleri ayırmanın noktasını sadece modele zaten bağlamak için görmüyorum! Sonuç - MVC, tahmin ettikleri bu yaratıklardan biri. 3 katmanlı bir şeyin "sistem mimarisi" veya "uygulama tasarımı" ile sınırlı olduğunu hatırlamıyorum. Temel kavram endişelerin ayrılmasıdır .
Sam

1
Ne yaptığınıza bağlı. Bir iOS uygulaması için bir MVC uygulaması (muhtemelen görünümün doğrudan Modelden güncellenmesine izin vermez) bir Web uygulamasından farklı olabilir (ki bu da olabilir). MVC, bir şeyler yapmak için mutlak bir yol değil, bir paradigmadır.
Dave Kanter

2
@Sam tamamen katılıyorum. Sezgisel bir kavram için çok fazla jargon var.
smwikipedia

1
kulağa hoş geliyor, çalışmıyor. Wikipedia gerçekliğin nihai kaynağı değil
ACV

Gerçeği yorumlama şekliniz ve yine hedeflerinizin ne olduğuna bağlıdır
Xinus

17

Tek benzerlik, iki desenin diyagramlarında üç kutu olması. Temel olarak kullanımlarında tamamen farklıdırlar. Aslında, genellikle hangi desenin kullanılacağı arasında bir seçim değildir, ancak her iki desen de uyumlu bir şekilde birlikte kullanılabilir. İkisinin iyi bir karşılaştırması: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
Bence bu, özellikle MVC'nin UI'ye gerçekten odaklanmış olması ve 3 katmanlı bir tasarımda UI katmanınız olabileceği için en iyi cevap olduğunu düşünüyorum. Bağlantıdaki diyagram bunu çok iyi gösteriyor.
Alex

5

Üç katmanlı mimaride temel kural, istemci katmanının hiçbir zaman doğrudan veri katmanıyla iletişim kurmamasıdır; üç katmanlı bir modelde tüm iletişim ara katman yazılımı katmanından geçmelidir.

Liner mimarisi. Bu, bir kullanıcı ile bir veritabanı arasında bilgilerin nasıl aktarılacağı sorusunu ele alır. MVC'nin üçgen bir mimari olduğu durumlarda: Görünüm Denetleyiciye güncellemeler gönderir, Denetleyici Modeli günceller ve Görünüm doğrudan Modelden güncellenir. Bu, bir kullanıcı arayüzünün ekrandaki bileşenleri nasıl yönettiğine ilişkin soruları ele alır.


5

@Cherry Middle ware daha çok MVC Deseninde bir istek işleyici veya yeniden yönlendirici gibi çalışır.

Ben MVC hakkında biraz açıklamak istiyorum, Bana göre Model View Controller böyle çalışır.

  1. Müşteri, herhangi bir hizmet talep ederek oturumu başlatır.
  2. Bu istek Denetleyici tarafından alınır ve ele alınır (İstek işleyicisi, yeniden yönlendirici vb.)
  3. Denetleyici, istekle ilgili temel bilgileri işler ve veri isteğini doldurabilecek ilgili Model'e yönlendirir.
  4. Model, isteği Kontrolör tarafından geçirilen parametrelere göre doldurur ve sonuçları Kontrolöre geri gönderir. (Not: Burada, verilerin doğrudan MVC mimarisinde istemciye doğrudan döndürülmediğini, doldurup denetleyiciye geri döndüğünü belirtmek isterim.)
  5. Bu verileri View (Client) 'a göndermek yerine kontrolör.
  6. Müşteri önündeki hizmeti istedi.

Bütün bunlar MVC ile ilgili biliyorum.


1
Yukarıda belirtildiği gibi, MVC'nin üçgen olduğunu düşünüyorum, bu yüzden Görünüm bu
modelde

5

Kendinize bir mola verin. Ve gerçek dünya problemlerini çözerken kendinizi belirli kalıplarla sınırlamayın. Sadece bir tanesi endişelerin ayrılması olan bazı genel ilkeleri hatırlayın .


4

Doğrusal olmanın yanı sıra, burada yeterince vurgulanmayan bir diğer önemli fark, N katmanlı modelde, N'nin mutlaka 3 katmanlı olmamasıdır! Çoğu zaman üç katman (sunum, uygulama, veri) olarak uygulanır ve orta katman iki alt katmana (iş mantığı ve veri erişimi) sahiptir. Ayrıca, MVC'deki model, veri manipülasyonu için hem verileri hem de iş mantığını içerebilirken, bunlar n-katmanda ayrı katmanlarda olacaktır.


3

Bir N-Katman mimarisi en iyi Dağıtım Diyagramı kullanılarak tanımlanır.

Bir MVC mimarisi en iyi bir Dizi Diyagramı kullanılarak tanımlanır.

2 aynı değildir ve birbiriyle ilişkili değildir ve iki mimariyi birleştirebilirsiniz. Birçok şirket, yalnızca dağıtım ve ölçeklenebilirlik için değil, aynı zamanda kodun yeniden kullanımı için N Katmanlı mimari oluşturma adımlarını attı.

Örneğin, Business Entity nesnelerinizin bir masaüstü uygulaması, bir istemciye açık olan bir web hizmeti, bir web uygulaması veya bir mobil uygulama tarafından kullanılması gerekebilir. Sadece bir MVC yaklaşımı kullanmak, hiçbir şeyi yeniden kullanmanıza yardımcı olmaz.


Eğer mvc verdiğiniz senaryo için herhangi bir şeyi tekrar kullanmıyorsa, mvc kemerle karşılaştırıldığında mvc'nin herhangi bir faydası vardır.
Ejderha

2

Sonuç: N-katman bir mimari, MVC bir tasarım modelidir. İki farklı alanda uygulanan aynı metaforlardır.


1

Jerry: İşte bu ikisinin nasıl ilişkili olduğuna dair basit bir örnek:


Tier 1 - Bir tür ağ hizmeti veya benzeri bir şekilde Tier 2 ile iletişim kuran Modellerden, giriş doğrulamasını, hesaplamaları ve görünümlerle ilgili diğer şeyleri işlemek için kontrolörlerden oluşur. Ve bir masaüstü uygulamasında GUI veya bir web uygulamasındaki web arayüzü olabilecek görünümlerin kendileri, tabii ki içerir.


Tier 2 - Tier 1'den mesaj almanın bir tür hizmetini veya başka bir yolunu içerir. Tier 1 hakkında bir şey bilmiyor / bilmiyor, bu yüzden sadece yukarıdan gelen çağrılara cevap verebilir - hiçbir zaman kendi başına bir şey istemeyin. Ayrıca tüm iş mantığını içerir.


Tier 3 - Veritabanı girişlerini iletmek ve güncellemek için alan modelini, veritabanının nesne temsilini ve tüm mantığı içerir.


1

Üç katmanlı bir modelde tüm iletişim orta katmandan geçmelidir. Kavramsal olarak üç katmanlı mimari doğrusaldır. Ancak, [model-görünüm-denetleyici] MVC mimarisi üçgen şeklindedir: görünüm denetleyiciye güncellemeler gönderir, denetleyici modeli günceller ve görünüm doğrudan modelden güncellenir.


Aslında MVC değil, MVVMC. MVC veya MVVMC'nin sadece bir sunum katmanı olduğunu görüyorum, çünkü kontrolörün görünümler ve BLL arasında sadece bir ara katman olduğunu görüyorum. BLL'yi farklı platformlar için kullanıcı arayüzü oluşturmak üzere bir kütüphane olarak kullanabilmem için bu şekilde koruyacağım. Asmx destekli bir çeşit aspx.cs. Zaman zaman MVC bir proje klasöründeki dosyaları düzenlemek için kötü bir yol olduğunu hissediyorum, anlamak biraz zor çünkü tüm denetleyicileri bir düzeyde ve alt klasörlerde görünümler olacak. Ayrıca denetleyiciler için alt klasörler oluşturabilirim, ancak yinelenen işi.
Nithin B
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.