Nasıl düzgün Zend Framework kullanarak Domain Oluşturma?

1 Cevap php

Ben süre geri this question bir sordu ama şimdi benim veritabanı erişim katmanı ve etki alanı katman arasındaki gerçek mesafeyi uygulamak için arıyorum. Ben de aittir ve denetleyici komut dışarı alanı içine iş mantığı taşımak için çalışıyor gidiyorum.

Ben veri erişim katmanı için Tablo Veri Ağ Geçidi ve Satır Veri Ağ Geçidi modellerini uygulayan Zend Framework kullanarak değilim, ama görünüşe göre gerçekten veri erişim katmanı ayrı bir etki alanı katman oluşturmak için nasıl tanımlamak için başarısız olur. Ben etki mantığı veri erişim mantığı ile bir arada bir Active Record desen kullanarak kabul ettik, ama en az bir kez ben Active Record idare edecek sanmıyorum ki ortaya şu durum var:

Ben person_id ve UserType alanları içeren tek bir tablo "Kişi" var.

Her UserType (yönetici, alıcı, doçent, gözetmen) onunla ilişkili özel iş mantığını ve tüm tipleri Kişi nesneden bazı temel işlevleri devralır.

Ben kullanıcı sadece tek tip spesifik ait iş mantığı ile Satır Veri Ağ Geçidi nesneyi kabartmak istemiyorum ama ben kullanıcıların farklı türlerini temsil etmek etki katmanı oluşturmak için nasıl emin değilim. Örneğin, ben PersonGateway nesnesi içeren bir Person nesnesi yapmak ve sonra ağ geçidi nesnesine aramaları geçmek, ya da ben PersonGateway nesnesi genişletmek ve daha sonra sadece ihtiyacım belirli işlevleri yerine Person nesnesi yazıyorum sarıcı işlevleri yazıyorsunuz?

Aynı şekilde, ben genellikle bu (kısmen) Ben UserType dayalı doğru alt-sınıf örneğini bir fabrika yöntemini gereken bir fabrika sorun olduğunu düşünürdüm. Hala Zend Framework Zend_Db sınıfı ile burada en iyi yöntem midir?

Herhangi bir öneri veya düzgün Zend_Db'nin üstünde bir etki alanı modeli oluşturma hakkında konuşmak öğreticiler bağlantılar büyük mutluluk duyacağız.

1 Cevap

Domain Modelleri şey uzatmak. Onlar iş mantığını saklanması için kullanabilirsiniz sadece düz sınıflar demektir. Onlar use veri erişim nesneleri olabilir, bu nedenle sınıf içinde bir satır veri ağ geçidi bir nesne protected örneği olabilir. A Row nesnesi genellikle daha yakından bir Table nesne daha etki bir örneğini temsil etmektedir. Ayrıca, her zaman Row 's getTable() yöntemi ile Table nesneyi alabilirsiniz.

Tipik DM sınıflar yöntemleri o sınıfın ile yapabilirsiniz üst düzey operasyonlarına karşılık gelen bir arayüze sahip. Ama mutlaka tüm veri erişim işlemleri yüzey istemiyorum.

class Person {
  // Zend_Db_Table_Row object
  protected $data; 

  public function subscribeToService(Service $service) { ... }

  public function sendMailTo(Person $recipient) { ... }

  public function changePassword($newPassword) { ... }
}

Ben de bu konuda son spring hakkında bir yazı yazmış, ve ZF posta listesinde bu konuda yazdı recently.

Bildiğim kadarıyla dersler ve kaynaklar gibi, http://domaindrivendesign.org/ deneyin