Saya sedang mengerjakan proyek TDD, jadi saya mencoba untuk menempel sebanyak mungkin pada praktik-praktik baik yang terkait dengan pengembangan semacam itu. Salah satunya adalah menghindari sebanyak mungkin statis dan global.
Saya menghadapi masalah ini: Saya memiliki "artikel" objek yang dapat memiliki "opsi" (tambahan "artikel mikro") yang terhubung dengannya.
Saya tidak dapat menemukan cara untuk memiliki pendekatan yang baik yang tidak akan menjadi kontra-produktif atau menghasilkan terlalu banyak pertanyaan karena saya akan berada dalam situasi di mana semuanya begitu terpisah sehingga pada dasarnya saya perlu membuat 1 permintaan per objek.
Dari perspektif saya yang sebenarnya, saya melihat 3 opsi:
1) Membangun di dalam artikel:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
Pro: Lurus ke depan
Const: Maintenability: Objek artikel sekarang berisi logika bangunan untuk objek Opsi. Ini mungkin akan menyebabkan duplikasi kode.
2) Menggunakan optionFactory
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
Pro: Membangun logika tidak keluar dari kelas Artikel
Const: Saya melanggar aturan "statis sulit untuk dipermainkan", membuat kelas Pasal saya sulit untuk diuji.
3) Pisahkan semua logika.
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
Pro: Artikel hanya menangani tanggung jawabnya sendiri, dan tidak peduli dengan tautan "ayahnya" ke opsi. Segala sesuatunya benar-benar terpisah
Const: Akan membutuhkan lebih banyak kode di dalam Controller setiap kali saya harus mengakses Options. Itu berarti bahwa saya seharusnya tidak pernah menggunakan Pabrik di dalam suatu objek, dan itu semacam utopis bagi saya ...
Apa cara terbaik untuk pergi? (Apakah saya melewatkan sesuatu?) Terima kasih.
Edit:
Belum lagi jika saya tidak dapat memanggil pabrik di dalam kelas, pada dasarnya saya tidak akan pernah menggunakan pola inisialisasi malas juga ...