MVC Modelleri anlamak için Önerileri çalışıyorsunuz?

4 Cevap php

Bunu öğrenme amacıyla kendi MVC yazıyorum. Ben hemen hemen her şeyi "down-pat" ve bazı nedeniyle sorun onları anlama ve canlı örnekler eksikliği modellerin yanı sıra yazılı benim ana şeyler var.

"Bulucu" class kullanılmalıdır - Şimdi, ben bir model tek bir satır reprecent gerektiğini söylendi, birisi model sınıf güncelleme / ekleme ve silme satır, bir tek veya birden fazla satır getiriliyor içerir şey gerektiğini söyledi.

Yani ... a) bulucu sınıf b) nasıl bir kullanım hızı örnekte bunu uygularım, ne olduğunu, c) Doğru modelleri hakkında söylendi ne mi, yoksa "bulma" daha iyi bir yolu var mı?

Tavsiye çok appricated ediyor :)

4 Cevap

Bu MVC M sadece veritabanı hakkında yaygın bir yanılgıdır. MVC'ın temel amacı M VC hakkında bilmez bir şekilde kalan uygulamadan sunum katmanı ayırmaktır.

V ve C UI, kullanıcıların uygulama ile etkileşim hangi bir dış tabaka oluşturur. Gerektiğinde C M tüm giriş V istekleri ve delege işler. V webbased MVC M. değişiklikleri gösterir, V ayrıca örneğin içerik, sunum ve davranış, ayrıştırılır HTML, CSS ve JavaScript.

Uygulamanın kendisi M. içindeki Bu UI izole çalıştırmak gerekir olduğunu. Gibi, sadece veri erişim katmanı ihtiva etmez, fakat hemen hemen diğer tüm katmanları, ancak sunum katmanı. Bu, ancak olmayabilir, vb dals, Hizmet Katmanlar, Domain nesneleri içerebilir - uygulamanız için gerekli olan ne ise, bir RSS beslemesi veri alma veya Webservice veya Sendig e-postalar için veri bastırıyor ya da Gelir, vb hesaplayabilir

Bir DAL Tek bir satır temsil etmelidir olsun, bir tablo veya başka bir şey size kalmış. Bu mimari için vazgeçilmez bir tasarım seçimdir. Dört ortak desenleri Tablo Veri Ağ Geçidi, Satır Veri Ağ Geçidi, Active Record ve Veri Mapper vardır.

http://martinfowler.com/eaaCatalog/index.html genel bir bakış için göz atın.

CakePHP diyor ki:

Modeller veriyi temsil ve veri erişimi için CakePHP uygulamalarda kullanılır. Bir model genellikle bir veritabanı tablosunu temsil eder ama bir şey erişmek için kullanılabilecek böyle bir CSV dosyası dosyalar, LDAP kayıtları, iCal olaylar, ya da satır gibi veri depolar.

(http://book.cakephp.org/view/66/Models)

Temelde, modeli, iş verilerinin kalıcı depolama temsil eder. Normal olarak, bu veri tabanıdır.

Veritabanlarından ve nesneler hakkında konuşmaya başladığınızda, genellikle PHP çerçeveler Models uygulamak kaç olduğunu çok tartışılan 'nesne-ilişkisel haritalama' aleme düşer.

Bir Model genellikle bir tablodaki bir satır gösterir, ama aynı zamanda birden çok tablodan satır bir grup olabilir. Bir Model yollar sonsuz sayıda temsil edilebilir: Bir metin dosyası gibi basit bir şey için bir Doctrine db nesnesi gibi karmaşık ve şişirilmiş bir şey.

Modellerini temsil tercih edilen yoldur ana masada modelin başına bir satır ilgili herhangi bir üst tabloları ile katıldı ve herhangi bir alt tablo üye nesneleri içeren olduğunu. Etkili bu uygulamak için tek yol, tüm nesneleri seferde alinabilir ve böylece gereksiz sorguları yapmazlar böylece bir tür 'Collection' sınıfını kullanmaktır.

Edit: Bir veritabanına gezileri sayısını en aza indirmek istiyorsanız doğrudan sorunuzu yanıtlamak için, evet, bir "bulucu" veya "Koleksiyon" class kesinlikle gereklidir. Her model kendi kendine yeterli olsaydı, tek tek 'FROM tablo WHERE id = x' sorguları yüzlerce yapıyor olurdum. Bir bulucu veya Koleksiyon sadece birden çok satır SELECT ve Model nesneleri içine veri dökümü olabilir.

Cevabı "değişir" düz eski.

Bir model tek bir satır veya satırları topluluğu (Burada veritabanı veri bahsediyoruz tahmin) temsil etmek zorunda değildir. Sizin modeli iş mantığı varlıkları eşleştirmek için kullanılmalıdır. Senin modeli verilerin sadece bir alt kümesi bir veritabanı ile etkileşim yoluyla elde edilebileceği, sebat gerektirir.

Biz Doktrin durumda başvurursanız yaklaşan Doktrini 2 doktrin rekor temel sınıfından uzatmak için modeller zorlamaz, neden budur.

Zend Framework gibi MVC çerçeveler bir "Zend_Model" konsepti ile size sunmaz Ve neden bu inanıyorum. Sizin modelleri durumda davayı uygulanmalıdır.

Siz modeli sınıfının statik yöntemler olarak ölçerler uygulamak:

$foo = ModelFoo::find($id)