Veri Mapper Dayalı Polimorfik Domain Objects

3 Cevap php

Ben bir temel alan bir nesne var, Kişi veya Kampanya veya veritabanındaki tek bir tablo ile temsil edilir Olay gibi söylüyorlar. Ancak, ben de bu nesnelerin daha karmaşık versiyonları teorik baz nesnelerden birini uzanabilen bile PersonCampaign veya PersonEvent veya CampaignEvent gibi söylemek var.

PHP çoklu mirası desteklemez Ancak, nedenlerle bir dizi için bu (örneğin PersonEvent Kişi ya da olay uzatmak yok) karmaşık hale gelir. Ve ayrıca bazı etki alanı nesneleri aslında değişen özellikleri ve fonksiyonelliği ile fabrika nesneleri (örneğin Olay aslında e-posta, arama, faks gibi olayın türüne göre sınıflandırma olduğu) çünkü.

Ben görebiliyorum kolay çözüm veri erişim katmanı döndürülen hangi verilerin dayalı nesne değişimin gerçek doğasını sahip olmaktır.

Herkes bu işlemek için daha iyi bir yol üzerinde herhangi bir öneriniz var mı? Ya da veri erişim katmanı şu anda bunun için kullanılabilir ne dayalı özelliklerini ve davranışlarını değiştirmek birleşik bir etki nesneleri oluşturmak için doğrudur?

3 Cevap

Bir OOP bakış açısıyla PersonEvent gerçekten bir nesne, onun bir ilişki değil.

Kişi sınıfı işlevleri gibi alabilir:

get_events()
add_event($Event)
remove_event($Event)

ve Olay sınıfı

get_person()
set_person($Person)
unset_person() // set person_id to NULL

(: Kişi ve olay arasındaki ilişkiyi N 1 varsayarsak)

Kötü kısmı bu veri-mapper'ın karmaşık veya alışkanlık tüm veri mapper'ın mı kullanacak.

Çözeltisi kapsülü diğer nesneler:

PersonEvent sınıfı Kişi ve Olay içerir.

Ya bir fonksiyon $ PersonEvent-> get_event () veya mülkiyet $ PersonEvent-> Olay tarafından erişilebilir;

Ne gibi bir kurulum sahip hakkında:

Table: Person , Sales Person, Customer Person, etc.. The person table stores the generic information about all sub-types of persons. Then there are other tables FK'd to the person table. It stores additional unique information about that sub-type.

Sizin nesneler uzatmak, ya da birincil verilere erişmek için genel 'kişi' nesnesi çağırır ya, o alt-türü için benzersiz veri erişim almak için benzersiz türü nesne var diyorsun?