Bir TDD projesindeyim, bu yüzden bu tür bir gelişmeyle ilgili iyi uygulamalara mümkün olduğunca bağlı kalmaya çalışıyorum. Bunlardan biri mümkün olduğunca statik ve küresel olmaktan kaçınmaktır.
Ben bu sorunla karşı karşıya: Ben bağlantılı "seçenekleri" (addnal "mikro-makaleler") olabilir bir nesne "makale" var.
Ben karşı üretken olmayacak veya çok fazla sorgu üretmek olmayacak iyi bir yaklaşım var nasıl anlayamıyorum çünkü temelde nesne başına 1 sorgu yapmak gerekecek kadar ayrıştırılmış bir durumda olurdu.
Gerçek perspektifime göre 3 seçenek görüyorum:
1) makale içinde inşa:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
Pro: Düz ileri
Sabit: Bakım: Makale nesnesi artık Option nesnesi için yapı mantığı içeriyor. Bu muhtemelen kod yinelemesine yol açacaktır.
2) Bir seçenek kullanmaFabrika
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
Pro: Yapı mantığı Makale sınıfının dışında değil
Const: "Statik alay etmek zor" kuralını çiğniyorum.
3) Tüm mantıkları ayırın.
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
Pro: Makale sadece kendi sorumluluğunu taşıyor ve seçenekleriyle "babası" bağlantısını umursamıyor. İşler gerçekten birbirinden ayrıldı
Const: Seçenekler'e her erişmem gerektiğinde Denetleyici içinde daha fazla kod gerekecektir. Bu, asla bir nesnenin içinde bir Fabrika kullanmamam gerektiği anlamına geliyor ve bana bu tür bir ütopik geliyor ...
Gitmenin en iyi yolu nedir? (Bir şey mi kaçırdım?) Teşekkürler.
Düzenle:
Sınıf içinde fabrikayı arayamazsam, tembel başlatma desenini de asla kullanamayacağımdan bahsetmiyorum bile ...