PHP MVC - Nasıl tasarımı için?

3 Cevap php

Ben nispeten iyi web tasarımı usta değilim. Ben çoğunlukla kullanmak, ben zaten kendi küçük bir "çerçeve" var LAMP için gidin. Kısacası, bu düzeni mantığı ayırır ve ben görünümleri düzeni desteklenen ne bağlı bir veya birçok düzen dosyaları temelde bir mantık dosyası var. Bir yönetici bölümü var ve kullanıcı auth ve tüm bu şeyler vardır. Güzel.

Ya da geniş web programlama - - PHP tasarım / programlama yoluma daha ayrıntılı almak isteyen Yani, ben MVC düzgün "düşünmek" için nasıl merak ediyorum. Benim geçerli çerçeve odaklı çok DB ve performans özü burada biraz ağır olmuştur beri ben bu şekilde doğru eğilerek ediyorum.

So here's my question: Ben bir kontrolör genellikle "bölümünde" veya "sayfa" karşılık gelen ve bir görünümü olduğunu denetleyicisi görüntüleme ilgilenir ve o varsayarak düzetin Am bir model kontrolör tarafından kullanılan nesneleri işleme ve sergilenmektedir görünümlerinde?

Kullanıcının (benim düşünce geçerli olup olmadığını çok ayrıntılı, ama yeterli değil görmek için) bir örnek verelim:

Say we have a simple games website. The sections would typically be something like: frontpage, games, forums, and about / disclaimers etc.

controller classes bölümlere karşılık ancak bölüm iki kontrolörleri olur bölüm yani oyunlar ile kaplıdır nesne "tek örnek" sürümünü karşılamak için biraz daha özenli alır; oyunlar bakış (oyunların listesi) için bir ve oyun sayfasında kendisi için. Bütün frontpage, games-overview, gamepage, forums, forum, topic-page, about, and disclaimer gibi bir şey olurdu.

views her denetleyici için, örneğin düzenleri bir sayı olabilir kontrolörleri ama belki böylece (bunları görmek istiyorum nasıl bağlı) forumlar sayfaları ve oyun sayfaları (belki yüksek puanlar görünümü) ve görüş çeşitli türleri gibi aynı.

model (or dataobjects) tipik kullanıcıları, oyunlar, forumlar, konular, mesajlar, ve o zaman başlık etiketleri, oyun skorlar ve ne mümkün konular kategorize yapmak için değil ve Skorlara var edebilmek oyunları gibi yardımcı nesneleri bir sürü vs vs

Düşünme yukarıdaki "doğru" yol ya da tamamen web siteleri için tüm MVC kavramını yanlış anlama duyuyorum.

Ben CodeIgniter veya bazı ışık çerçevesinde kendi çerçevesi çok DB-odaklı ve şimdi kesim değil çünkü (çerçeve seçenek ya da kendi için gitmek daha iyi olup olmadığını açıklamaktan çekinmeyin) üzerinden hareket düşünmeye ediyorum ki benim sitelerin çift 70.000 sayfa görünümleri / gün geçiyoruz.

Bir samimi MVC almak benim biraz doğru ve mümkünse aynı zamanda, MVC kodlama zaman düşünmek ne bir kaç ipucu eklemek olsun veya olmasın cevap yardımcı olabilir o sizin kim için teşekkür ederim ve hala (kenar kesim performansı sürdürmek istiyoruz o kadar) betik dilleri ile mümkündür.

3 Cevap

Öncelikle, bu bir php özel bir soru değil, web programlama için MVC deseni nasıl uygulanacağı konusunda bir soru değildir. Ve gerçekten MVC deseni neredeyse uygulama bu alanda bir zorunluluk haline geldiğini web uygulama geliştirme alanında çok mantıklı.

Şimdi, MVC deseni kendisi gibi, SO zaten çok iyi cevaplar bulabilirsiniz. Örneğin Soru ve Cevapları What goes into the controller.

Lütfen kontrolör mimarisi web sitenizin yapısını haritasına nasıl sorusuna gelince ben şunları tavsiye ederim.

  • navigasyonu ziyade uygulama mantığını harita kalkmayın
  • fonksiyonların her mantıksal birim için, bir kontrol cihazı
  • kontrolörleri içinde, her görünüm için bir genel yöntem
  • ağırlıklı modelleri ve görünümleri arasında ağ geçidi oynamak yerine yağsız kontrolörleri

Senin durumunda gameoverview sadece bir liste ise Yani, örneğin, kendi denetleyici gerekir değil modelinden listesini alır ve ilgili görünümüne gönderir indexcontroller sadece bir yöntemdir değildir. Ama gameoverview sen farklı görünümleri ve görevleri için çeşitli yöntemler ile bir overviewController olabilir birçok olasılık ve farklı subviews, vb karmaşık bir mekanizma olup olmadığını.

Gerçekten Zend Framework içine bakarak ve nasıl bu sorunlar çözülür öneririz. IMO Eğer gerçekten yaparak sorunun konu hakkında bir çok şey öğrenebilirsiniz.

Wikipedia, temelde muhtemelen bu açıklamayı daha iyi olduğunu, ancak

senin modeli temsil eder ve özetler, bu temel veriler (diğer elemanlar veritabanı ile etkileşim var ... hatta orada olduğunu bilmiyorum bu yüzden örneğin bir soyutlama katmanı sağlar).

denetleyici modelini değiştirmek için isteklerini işler.

Lütfen görünümü denetleyicisi modeli ve geribildirim kısmının ekran.

Neither the controller nor the model should handle display. display. Neither the model nor the view should handle incoming POST data or the like. Neither the controller nor the view should deal with the data sources.

rolleri iyi bir açıklama için http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#Description bkz.

Ne söz açıklayan bu açıklamasına uymuyor. Bu modeli sınıfları temsil elemanlara istekleri işlemek için bir model sınıf başına denetleyicisi (veya daha az), diyelim ki, orada olmalıdır.

Sizin views açıkça herhangi bir denetleyici ya da model elemanı bağlı olmamalıdır. görünümü, bir bütün olarak modelin bir alt kümesini gösterir.

Bir görünüm ve denetleyici arasındaki etkileşim sadece geribildirim ekran.

Umarım yardımcı olur.

EDIT: As other have pointed out there are a number of MVC frameworks already built. (See http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#PHP for a list) and I'd advise against being too attached to a framework you've already built if there's another that does the job better.

CodeIgniter is a great tool for MVC beginners, I would suggest you look at net.tutsplus.com there is an ongoing video tutorial on CodeIgniter

added

CI dalmak isteyen yeni başlayanlar için, videotuts bağlantılar:

added

Ben büyük ve güçlü bir çerçeve olarak CI tavsiye etmiyoruz, ama şahsen ben Symfony'de ve Yii yanayım, o beginners için basit ve onlar ondan bir çok şey öğrenebilirsiniz