ฉันอยู่ในโครงการ TDD ดังนั้นฉันจึงพยายามยึดแนวทางที่ดีที่เกี่ยวข้องกับการพัฒนาประเภทนั้นให้มากที่สุด หนึ่งในนั้นคือหลีกเลี่ยงมากที่สุดคงที่และเป็นไปได้ทั่วโลก
ฉันกำลังประสบปัญหานี้: ฉันมี "บทความ" วัตถุที่สามารถมี "ตัวเลือก" (เพิ่มเติม "บทความไมโคร") ที่เชื่อมโยงกับมัน
ฉันไม่สามารถหาวิธีที่จะมีวิธีการที่ดีที่จะไม่ตอบโต้การผลิตหรือสร้างการสืบค้นมากเกินไปเพราะฉันจะอยู่ในสถานการณ์ที่ทุกอย่าง decoupled ดังนั้นโดยทั่วไปฉันจะต้องทำ 1 แบบสอบถามต่อวัตถุ
จากมุมมองที่แท้จริงของฉันฉันเห็น 3 ตัวเลือก:
1) สร้างภายในบทความ:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
Pro:ตรงไปข้างหน้า
Const: Maintenability: ตอนนี้วัตถุบทความมีตรรกะการสร้างสำหรับวัตถุตัวเลือก ซึ่งอาจนำไปสู่การทำสำเนารหัส
2) การใช้ optionFactory
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
Pro:ตรรกะการสร้างไม่ได้อยู่ในคลาสของบทความ
Const:ฉันกำลังฝ่าฝืนกฎ "คงยากที่จะเยาะเย้ย" ทำให้ชั้นบทความของฉันทดสอบได้ยาก
3) แยก logics ทั้งหมด
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
Pro:บทความจัดการกับความรับผิดชอบของตนเองเท่านั้นและไม่สนใจเกี่ยวกับลิงก์ "พ่อ" ของเขาไปยังตัวเลือก สิ่งที่แยกออกจริงๆ
Const:จะต้องใช้รหัสเพิ่มเติมภายในคอนโทรลเลอร์ทุกครั้งที่ฉันต้องเข้าถึงตัวเลือก นั่นหมายความว่าฉันไม่ควรใช้โรงงานในวัตถุและเสียงที่ดีสำหรับฉัน ...
วิธีที่ดีที่สุดที่จะไปคืออะไร? (ฉันพลาดอะไรไปหรือเปล่า) ขอบคุณ
แก้ไข:
ไม่ต้องพูดถึงว่าถ้าฉันไม่สามารถโทรหาโรงงานในชั้นเรียนได้ฉันจะไม่กล้าใช้รูปแบบการเริ่มต้นขี้เกียจเกินไป ...