Bir Web Uygulama MVC kullanmak için değil?

8 Cevap php

Ben yeni bir proje için bazı fikirler ortaya çıkarmayı üzerinde çalışıyor, ve ben sevdim bir şekilde, bazı zorluk şeylerin bir MVC çerçeve içine sığdırmak için alma (durumunda, CodeIgniter) sahip olduğu anlaşılmıştı. Ben bu tasarımı ile biraz daha fazla çalışma ve daha iyi bir düzen sergiyi aşılabilir inanıyordu iken, Bu düşünce beni var: MVC not en iyi cevabı burada olabilir mi? değil ise ne zaman bir proje için MVC iyi bir fikir kullanıyor ve zaman değil mi?

Ben MVC could herhangi bir web uygulaması için kullanılabilir gibi hissediyorum, ama en iyi çözüm değil zaman ben merak ediyorum.

8 Cevap

MVC bugün gördüğümüz web uygulamaları için neredeyse evrensel uygulanabilir olduğunu düşünüyorum. Ama kullandığınız çerçeve yapmak istediğiniz şeylerin türlerini destekleyen kadar her zaman olduğu anlamına gelmez.

MVC web de geçerlidir sadece bir kalıptır. Özel olarak, bir uygulama şu şekilde erişilir fikrine de geçerlidir:

  • Kullanıcı bazı kaynak sorar
  • Bazı temel verileri bir yere alınır.
  • Şablon daha sonra kullanıcıya göstermek amacıyla bu verileri uygulanır.

Ancak bu çoğu Web MVC çerçeveler her kullanıcının bir zamanda kaynakların büyük parçalar soran nispeten az sayıda istekleri ürettiği varsayımından başlar, inkar edilemez web çalışır yoludur. Ben web siteleri sık sık hareket ve küçük AJAX stili istekleri olarak MVC 'görünümü' kısmında daha fazla istemci üzerinde ele alınması gerektiğinden çerçeveler çok onları güzelce oynamak için almak için bazı çalışmalar gerektirir bulduk. Bunun için çerçeve desteği, sunucu tarafı görünümleri için olduğu kadar olgun yaklaşamaz. Ancak merkezi paradigma çok değişmez ve merkezi talebi - sorgu - şablon döngü hala orada.

Kısacası: MVC uygulama çalışır şekilde düşünmek için iyi bir yoldur, ama bu tüm ihtiyaçlarını kolları önceden yazılı çerçeve bulmak için gidiyoruz anlamına gelmez.

Geçenlerde aynı şeyi merak ettik. Ben MVC overkill olacak basit ve gerçekten küçük app dışında bariz bir cevap var eminim. Iş mantığı vs sunumu Ayrılması benim için iyi bir uygulama gibi görünüyor.

Bu olduğunda bir single page application.

(Aslında hala endişeleri ayıran ve küçük MVC değer yapıyor, ama PHP sunucu anlamda MVC değil)

Eğer veri (modelin) ayrılmasını gerektiren bir uygulama olduğunda Temelde, MVC veri (kontrolör) ve verilerin sunumu (görünüm) çatırdayan, iyi hizmet vermektedir. Bu da veri kaynağı ve / veya veri sunumu herhangi bir zamanda değiştirebilirsiniz bir uygulamada iyi hizmet vermektedir. Yani veri DB, RSS beslemesi, twitter API, vb ve üç katmandan uygulama ayırarak vb bir RSS beslemesi normal XHTML, bir mobil versiyonu, sunulabilir geliyor olabilir, bütün bunlar için gelişebilir sadece ilgili bir görünüm veya model oluşturarak farklı senaryolar.

Çoğu zaman, bir web sitesi / uygulama dikişler biraz doğal olarak bu kalıbı içine sığdırmak için; kısmen de, çünkü geç olarak desen popülerlik, bazıları sadece düşünmeden kullanabilirsiniz.

Ben gerçekten bu doğrudan bir cevap olduğunu sanmıyorum "zaman iyi bir fikir değil." Eğer uygulama doğal / kolayca fikir uyacak dikersin vermiyorsa ne söyleyebilirim. Eğer gerçekten fikir içine kıpırdamak varsa, bir MVC olarak işe almak için bir şeyler ekleme / silme / değiştirme başlar, daha sonra bunun için zamanı değil. MVC tasarım deseni, bu yüzden belirli bir durum için olası bir çözüm olduğunu unutmayın. Daha iyi uygulamaya uygun olabilecek diğer durumlar için diğer tasarım desenleri vardır. İşte link tasarım desenleri introducting bazı iyi makaleler için, ve sonra temel bazılarını olacak.

EDIT: I only noticed the PHP tag after answering the question, however, read the comments as the original question asker found the link useful, so I'll leave this answer here.

Jeffery Palermo bu çok şeyi tartışan bir blog yazısı var (ASP.NET MVC In Action yazarlarından biri):

You should NOT use ASP.NET MVC if. . .

O ASP.NET MVC eğer KULLANMAYIN gerektiğini belirtiyor:

  • Sen polimorfizmi ile çok rahat değil
  • Sen çerçeve üstüne inşa etmek istemiyorlar
  • Sen UI sürü için 3. taraf satıcı denetimleri güveniyor
  • Sen açık kaynak kütüphaneleri kullanılarak hoşlanmıyorsunuz

Ben (denetimleri yani içten Viewstate ve / veya faydalanmak bu listede büyük "show-stoper" MVC framework ile çok iyi oynamak istemiyorum 3. taraf denetimlere itimat (özellikle GridView değiştirmeleri vb) olabileceğini düşünüyorum Postbacks). Sen de oldukça "yerleşik" ASP daha bir web bileşeni (GridView veya Takvim tarzı kontrolleri akla bahar en belirgin olmak) belirli işlevleri işlemek için bazı 3. parti kontrol kullanımını zorunlu bir şirkette çalışıyor olabilirsiniz . benzer bir işlevsellik sağlamak NET denetimleri. Nitekim, dahili kontroller merkezli daha karmaşık ASP.NET WebForms birçok nedeni viewstate / geri göndermeler ve MVC modelinin diğer desteklenmeyen fonksiyonlar) kendi güven için MVC modeli ile çok iyi çalışmaz.

Eğer bina ASP.NET uygulaması inanılmaz derecede küçük ve sıkı bir fonksiyonu üzerinde duruldu ise de, bu (büyük bir şey için, ancak, yerine MVC çok daha "geleneksel" WebForms platformunu kullanarak geliştirmek için daha hızlı olabilir / yani muhtemelen çoğu ticari Bu üretilen kodun çok daha edilebilirliğini sağlar ve endişelerini daha iyi ayrılmasını teşvik gibi kurumsal uygulamaları) MVC belki daha iyi bir seçimdir.

Ben, dürüst, bir MVC yaklaşımını kullanmak için tavsiye olmaz herhangi senaryolar düşünmek olamaz. Mantıklı ve standart bir şekilde ayrılmış olarak kod belirgin farklı parçaları tutmak için bir metodoloji - Bu sadece bir kavramdır.

Codeigniter bir excellent çerçevedir. Ben birkaç kez kullandım. Bu konuda en iyi şey, IMO, bazı diğer çerçeveler size sadık hale katı kurallara sadık zorunda kalmamasıdır. Codeigniter size dürüst, verimli, organize kodunuzu tutmak ve güvenli ama bir yol sunar, size bunun içinde ister ancak kodu olabilir.

Derken ne demek istediğini hakkında biraz daha açıklayabilir misiniz:

"...and realized that I was having some difficulty getting things to fit into an MVC framework"

Ben gerçekten doğru bir karar vermenize yardımcı olmak istiyorum. Şu anda, uzakta Codeigniter gelen direksiyon, bana, bunun için ne masum yanlış dayanan kötü bir karar gibi görünüyor.

Bu kadar zaman bir MVC değeri hızla kayboluyor ...

  1. Aynı kodlama dilinde tek bir geliştirici ya da küçük takım çalışması ile bir proje
  2. Tek bir arayüz ile bir proje (bir masaüstü sürümü ör. sadece)
  3. Zengin bir UI, çoğunlukla istemci tarafında kod ve AJAX aramaların bir batarya ile bir proje
  4. Bir web sitesi (örneğin veri besleme, programı, vb) değil, bir şey
  5. Ekip üyeleri özgeçmişlerini "MVC" sahip umurumda değil herhangi bir proje
  6. Bundan yaklaşık 5 yıl içinde herhangi bir proje MVC moda çıkmak başladığında

Aşağıda birkaç uygulama olduğu bir two-tier ya da three-tier mimari daha uygundur:

  • Bağlantı Toplayıcı
  • Shortlink jeneratör
  • Web hosting yönetim paneli
  • Web IDE
  • Web Image dönüştürücü
  • Yazıcı Önuç
  • Sohbet Uygulama
  • Sürüm Kontrol Sistemi

İşte bazı diğer alternatifler şunlardır:

Four-Tier Architecture

Hexagonal Architecture

Pattern Oriented Software Architecture

Understanding Patterns for System-of-Sytems Integration{pdf}

Presentation-Abstraction-Control

Microkernel