MVC yalnızca web için mi geçerlidir?


14

Model Görünümü Denetleyicisi ( MVC ) hakkında geliştiricilerle her konuştuğumda , sunucunun bir varlık (MODEL) oluşturduğu ve size bu modelin görsel temsilini sağladığı bir istekte bulunduğunuzu söyledikleri neredeyse ve anlıktır .

  • Yani bu MVC sadece web için mi yoksa sadece web uygulamaları yazmak için MVC kullanan geliştiriciler olan insanlarla mı tanıştım?

  • Masaüstü stili uygulamalarda MVC kullanımları var mı?

  • Ben bir paradigma için yeni ve MVC herhangi bir süper set bilmek istiyorum


1
'mvc' için Programmers.SE veya Stack Overflow etiket wikisini kontrol ettiniz mi ?
gnat

3
@gnat yes yaptım
Deeptechtons

6
o zaman muhtemelen sorunuzun cevabını zaten biliyorsunuz değil mi?
gnat

4
@gnat ciddi HAYIR, ben MVC için tamamen yeni (belirtildiği gibi) ve MVC windows uygulamalarına uygulanan veya indirilenler sayfasında bir MVC rozeti spor yapan bir uygulama hakkında hiç kullanmadım veya duymadım (bazı kulaklar var). Soruyu aptalca, ama benim için
üzgünüm

MVC tarihini öğrenmek için birçok iyi kaynak var ama bu yanlış algıyı
KutuluMike

Yanıtlar:


22

MVC bir kalıptır. Kalıplar tüm programlama boyunca geçerlidir. MVC sadece bir web bağlamında çok iyi çalışıyor.

Gnat'ın işaret ettiği gibi , mvc etiketine bir göz atın ve uygulandığına dair çok sayıda örnek göreceksiniz.


5
Bu anahtar. MVC, web uygulamalarında gerçekten iyi çalışır ve gerçekten de modern MVC tabanlı çerçevelerin (Rails, Django ve ASP.NET MVC gibi) bu kadar popüler olmasının nedeninin büyük bir kısmıdır. Diğer bağlamlarda da (masaüstü uygulamaları gibi) çalışır, ancak temiz bir görünüm ve denetleyici ayırımı tutmak daha zordur, bu nedenle Model-delegetor (Swing tarafından kullanılır) gibi görünüm denetleyicisi ayrımını kaldıran veya bölünmenin nerede gerçekleştiğini değiştiren varyantlar Model-View-ViewModel gibi (çoğunlukla .Net WPF uygulamaları tarafından kullanılır) Masaüstü Uygulamalarında daha yaygındır.
Kevin Cathcart

Bir denetleyicinin ne yaptığının orijinal Smalltalk açıklamasına bakarsanız - kullanıcı girişini model için iletilere dönüştürür - Windows'un kendisi temelde büyük bir denetleyicidir; bu nedenle bir desen olarak MVC, Windows UI uygulamalarıyla çok iyi örtüşmüyor. Windows olmayan sistemler için UI Frameworks'te çok daha fazla kullanılır.
KutuluMike

@MichaelEdenfield Pek değil; MVP orada daha popüler olmasına rağmen MVC ve WinForms'u birlikte yapabilirsiniz, ancak MVP yine de MVC'nin bir çeşididir.
Andy

45

MVC'nin 1977'den geldiği ve web'in sadece 1991'de icat edildiği göz önüne alındığında, MVC'nin sadece web için olmadığı oldukça açık olmalıdır .


30
Bu güzel bir cevap başlangıcıdır, ancak ağızda acı bir tadı vardır.
Nicolas

2
Doğru ve sinsi. Harika şeyler!
Tom Hawtin - tackline

1
"1982'de Internet Protokol Paketi (TCP / IP) standartlaştırıldı ve dünya çapında İnternet olarak adlandırılan tamamen birbirine bağlı TCP / IP ağları ağı kavramı tanıtıldı." wiki . Eğer netscape demek istiyorsan, tamam ... ama ondan önce "web" vardı.
22:00

4
@jmquigley "İnternet" ve "Web" çok farklı iki şeydir.
Eric King

1
@jmq 1977, 1982'den önce STILL ve bir başkasının Web! = Internet'i işaret ettiği gibi. Web gerçekten 1991'den önce var
Andy

9

Hayır, OS X ve iOS için geliştirme Model Görünüm Denetleyicisi desenini kullanır.


2
Son olarak, yorumsuz birinci ve ikinci noktalara bir cevap.
JeffO

8

Soruyu bir Microsoft ortamında sorun ve birçok kişi özellikle web için bir MVC uygulaması olan Asp.Net MVC'yi kastettiğinizi varsayacaktır.

Ne yazık ki, bunun MVC modelinin bir uygulaması olduğunu fark etmeyen ve birbirinin yerine geçebilir terimler olduğunu düşünen birçok insan var, bu da "sadece web" varsayımına yol açıyor.


3
+1, bir metodolojiden sonra platform adlandırmakla ilgili sorun budur. İnsanlar platforma ilk tanıtıldıklarında ayrımı görmezler.
MattDavey

@Ozz bu MVC konu olduğunda diğer geliştiriciler neden her zaman web hakkında söylemek için kullandığını açıkladı
Deeptechtons

1
Lütfen Microsoft geliştiricilerini aptal gibi boyamayı bırakın, teşekkürler.
Andy

@Andy - bu MS geliştirici bashing değildi, ben bir Asp.Net MVC geliştiricisiyim ve orijinal cevap bekliyorum. "Tüm" insanlar ya da "tüm" .net geliştiricileri demedim, sadece birçok insanın gördüğüm bir varsayım ya da hatanın gözlemlenmesi. Teşekkürler.
ozz

2

En azından bildiğim kadarıyla, MVC'nin ilk uygulaması Smalltalk'taydı. Smalltalk-80'de kesinlikle mevcuttu. Kanıtlamak için kullanışlı bir dokümanım olmamasına rağmen, (veya yine de oldukça benzer bir şey) birkaç yıl boyunca Smalltalk'ta olduğuna inanıyorum.

Çoğu OO GUI çerçevesi, MVC'nin en azından bir varyantını içermiştir. Ancak, bu durumda "süper kümenin" tam olarak ne anlama geldiğinden emin değilim. Herhangi bir varyantın MVC'nin üst kümesi, alt kümesi veya akranı olup olmadığını söylemek biraz zor, ama çoğunu akranları olarak düşünmeye eğilimliyim.

Her durumda, bunların çoğu (çoğu?) Web geliştirme için değil masaüstü geliştirme için kullanılmıştır. Bazı eski AT&T patentleri sayesinde, çoğu pencere sistemi programların talep üzerine görünümleri yeniden oluşturabilmesini gerektirir. Bu (neredeyse), geçerli durumu (model) koruyan kod ile bu durumu (görünüm) gösteren kod arasında en azından bir dereceye kadar ayrım yapılmasını zorlar. Bu hala 1) kontrolör fonksiyonelliğinin izole edilme derecesi ve 2) ana parçaların her biri arasındaki çizgilerin nereye çekileceğinin kesin ayrıntıları için çok fazla alan bırakır.


1

Hayır, bağımsız uygulamalar için bile geçerlidir. Örnek Java Swing MVC'yi takip eder.


1
Neden izin aşağı kişi yaşasın!
Deeptechtons

1

Yani bu alanda birçok farklı tasarım deseni var.

  • Model Görünümü Sunucusu (mvp)
  • Model Görünümü Görünüm Sunucusu (mvvp)
  • Model Görünümü Denetleyici
  • Model 2

ve bunun gibi. Yıllar boyunca bunlar iç içe geçmiş, birlikte ezilmiş, değiştirilmiş ve çok çeşitli bağlamlarda uygulanmıştır. Burada önemli olan, 1977'deki MVC tasarım modelinin oldukça değişmiş olması ve artık sunucu tarafı web çerçeveleri tarafından kullanılan tasarım deseni olmamasıdır. Orijinal smalltalk uygulamasında bir örnek olarak Model, değişikliklerin görünümünü gözlemleyecektir; bu, sunucu tarafı kullanıcıların tarayıcısında html öğelerini gözlemleyemediği için artık geçerli değildir. Bunun yerine görünüm değişirse, görünüm denetleyiciye daha sonra görünümü güncelleyecek bir istek gönderir. Yine, modelde yapılan bir güncelleme modele bağlı tüm görünümlerin güncelleneceğini ima edeceği için orijinal MVC uygulaması takip edilmez.

Modern web çerçeveleri, Model 2 mimarisi olarak da bilinen basit üç katmanlı bir mimariyi takip eder.

Elbette web üzerinde gerçek MVC mimarilerinin örnekleri vardır, ancak bunlar genellikle istemci tarafıdır, görünümler xml ve json olduğu ve değişiklikler için gözlemlenmediği için Model 2 mimarisini takip eden bir sunucuya bağlıdır. İstemci tarafı saf mvc mimarilerine örnek olarak Sencha Touch ve Sproutcore verilebilir.

Tarayıcıda MVC, sunucuda mvc ve veri katmanı gibi mvc varsa, hiyerarşik bir mvc uygulamanız vardır.

Not. Ben sadece web çerçeveleri hakkında konuştum, java swing gibi diğer MVC uygulamaları ve Flex diğer uygulama farklılıkları vardır.


Kesinlikle insanların neden başkalarına oy verdiklerini anlamıyorlar, eğer bir şeyler yanlışsa lütfen onlara söyleyin ve görüşlerini düzeltme şansı verin. Eğer konu hakkında bilgi sahibi olmazlarsa, iyi bir öğretmen onları doğru kaynağa yönlendirir, doğru öğrenene kadar onu dövmez!
Deeptechtons

sorusu iyi togather o mvc ve İnternet'i varsayar ve non web mvc için dilenir, böylece yalnızca bir web bağlamında mvc örnekler verirken: -1
Hildred

1

Bilmeniz gereken bir şey, MVC'yi uyguladığını iddia eden çerçeveler olduğu gibi, MVC'nin birçok çeşidi olduğu.

Çoğu, Modelin bir durumu elinde tuttuğu ve Görüş'ün onu oluşturduğu konusunda hemfikirdir. Ancak Denetleyicinin çok farklı rolleri vardır.

İlk kez açıklandığı Smalltalk'ta, Model uygulamanızın, verilerinizin ve iş yöntemlerinizin çekirdeğidir. Görünüm, uygulamanın durumunun (Model olarak da bilinir) grafiksel bir temsilidir ve Denetleyici kullanıcı girişini, fare ve klavye olaylarını yönetir. Örneğin Denetleyici, klavye olaylarını odağı olan görünüm öğesine yönlendirir.

.Jsp sayfalarında, Model çoğunlukla veridir, Görünüm bu Modeli HTML'ye dönüştürür ve Denetleyici Modeli oluşturmak için uygun Görünüme yönlendirir.

Bu nedenle, sorunuzu cevaplamak için MVC hem bağımsız uygulamalarda (Java, .Net, Flex) hem de web'de (jsp sayfaları) kullanılırken, çok farklı bir şeydir. Bu, bildiğiniz MVC'nin bağımsız uygulamalarda kullanılmadığı anlamına gelir.

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.