MVC, sınıflar nereye gidiyor?

5 Cevap php

Aşağıdaki gibi MVC Benim anlayışım (o korkunç yanlış örtmek, ben yeni duyuyorum afterall) olduğunu

  1. Modeller veritabanı arayüzü şeyler
  2. İzlenme sayfa tasarım / düzeni vardır
  3. Kontrolörler her şeyin başladığı yerde ve esas sayfa mantığı vardır

I CodeIgniter kullanıyorum ama bu sadece ya hatta sadece PHP çerçeveler ile sınırlı değil, bir tahmin tehlike olur.

Nerede küresel sınıfları koymak?

I Ürünler için bir model olabilir ve ben daha sonra veritabanından 20 ürünleri toplayan bir sorgu çalıştırın. Ben şimdi 20 model yapabilirim veya ikincisi, nerede bu sınıf koymak yok (diğer kontrolörler de bunu kullanmak gerekir) eğer ben, bunun için ayrı bir sınıf olması gerekir

5 Cevap

Model ürünleri ile ne yapacağını tartışırken kullanmak için yanlış kelime: Her ürün value object (VO) (daha ağzınıza sığar ne olursa olsun ya da veri aktarımı objet / DTO) 'dir. Değer nesneleri genellikle bir tablo içeren aynı alanlara sahip. Senin durumunda ProductVO Products tablosunda var alanlar olmalıdır.

Model Data Access Object (DAO) gibi yöntemler olmasıdır

findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.

Sizin durumunuzda yukarıdaki yöntemleri gibi bir şey olan bir ProductDAO olurdu. Bu ProductDAO sonra ProductVO ait ve bunlardan koleksiyonları dönecekti.

Veri Erişim Nesneleri ayrıca Business Objects (BO) multipl VO adlı ve belirli iş durumdur ek yöntemler içerebilir dönebilirsiniz.

Addendum: In your controller you call a ProductDAO to find the products you want. The returned ProductVO(s) are then passed to the view (as request attributes in Java). The view then loops through/displays the data from the productVO's.

Model iş mantığı olur uygulamanın bir parçasıdır. Gibi modeli, nesneler arasında gerçek hayat ilişkileri ve bağımlılıkları temsil: Çalışan Yöneticiye rapor, Yöneticisi, birçok Çalışanları denetler, Müdür Çalışan Görevi atayabilirsiniz, Görev gecikmiş bildirim gönderir. Model ve en sık veritabanı arayüzü yapabilirsiniz, ancak bu bir zorunluluk değildir.

View görüntüleniyor görüntülenen veya yardım edilebilir her şey temelde. Görünüm, şablonlar, şablon nesneleri içeren şablon kompozisyon ve yuvalama kolları, üstbilgi ve altbilgi ile sarar ve iyi bilinen biçimlerinden birinde çıktı üretir (X / HTML, aynı zamanda XML, RSS / Atom, CSV).

Controller işlemleri Modele kullanıcı eylemleri çeviren bir çeviri katmanı olduğunu. Başka bir deyişle, ne modelini söyler ve bir yanıt verir. Denetleyici yöntemleri mümkün olduğunca küçük olmalı ve tüm iş işleme Modeli yapılmalıdır, ve görünümü mantık işleme Görüntüle yer almalıdır.

Şimdi sorunuza geri. Her ürün için ayrı sınıf gerekir eğer gerçekten bağlıdır. Çoğu durumda, bir sınıf yeterli olacaktır ve bunun örnekleri 20 yaratılmalıdır. Ürünleri iş mantığı temsil olarak bu uygulama kısmını Model ait olmalıdır.

CakePHP 3 daha fazla "parça" vardır:

  1. Davranışlar
  2. Bileşenleri
  3. Yardımcılar

Birçok model tarafından kullanılan mantık bir davranış olarak yapılmalıdır. CodeIgniter bu mantığı ya da varsa ben bilmiyorum, ama öyle değil, ben gibi bunu uygulamak için çalışacağını söyledi. Sen davranışları hakkında okuyabilirsiniz here.

(Bileşenleri denetleyici paylaşım mantığı olur ve yardımcıları aynı şekilde görüşlerini yardım).

: Basit yolu için

  1. Veritabanı tablo başına bir model sınıf var. Bu durumda tüm ürün detayları tutulan bir nesne olurdu.
  2. Bir paket / ad içine bu dersleri koymak, örneğin, com.company.model (Java / C #)
  3. Com.company.model.dao gibi bir paket içine DAO sınıfları koymak
  4. Sizin görünümü Ben bir liste olurdu Bu durumda oturum / istek / kontrolör verileri tüketecektir.
  5. Oh, PHP kullanarak ediyoruz. Bu işler nasıl değiştirdiğini bilmiyorum, ama herhangi bir modern dil gibi bir Koleksiyonlar çerçeve vardır düşünün.

@ Alexander CakePHPs Behaviors, Components ve Helpers bahseder. Bu ortak işlevselliğini soyutlayarak için mükemmel. Ben iş mantığı toplu modellerde yapılır tabii olarak Davranışlar özellikle yararlı buluyorum. Şu anda biz davranışları gibi gelmiş bir proje üzerinde çalışıyorum:

  • Kilitlenebilir
  • Yayınlanabilir
  • Tagable
  • Rateable
  • Commentable

vb

For code that transcends even the MVC framework i.e. code libraries that you use for various things that are not tied in to the particular framework you are using - in our case things like video encoding classes vb CakePHP has the vendors folder.

Etkili CakePHP ile ilgisi yoktur bir şey var gider.

Ben CodeIgniter o CakePHP daha küçük ve daha hafif, oldukça esnek bir yapıya sahip değildir, ancak hızlı bir bakış CakePHP Manual Davranışları, Bileşenleri, Yardımcılar ve Bayiler klasör yararlı olabilir görmek için şüpheli.

Bu sadece güzel tutmak ve DRY modellerin bazı ortak yardımcı sınıfları dahil etmek kolay bir mesele olmalı