मैं एक TDD प्रोजेक्ट पर हूं, इसलिए मैं उस तरह के विकास से जुड़े अच्छे प्रैटिक्स के लिए जितना संभव हो उतना छड़ी करने की कोशिश करता हूं। उनमें से एक यथासंभव स्थिर और वैश्विक से बच रहा है।
मैं इस समस्या का सामना कर रहा हूं: मेरे पास एक वस्तु "लेख" है, जिसमें "विकल्प" (अतिरिक्त "सूक्ष्म लेख") हो सकते हैं।
मैं यह नहीं पता लगा सकता हूं कि एक अच्छा तरीका कैसे हो सकता है जो काउंटर उत्पादक नहीं होगा या बहुत अधिक प्रश्न उत्पन्न नहीं करेगा क्योंकि मैं ऐसी स्थिति में रहूंगा जहां सब कुछ इतना कम हो जाता है कि मुझे मूल रूप से प्रति ऑब्जेक्ट 1 क्वेरी बनाने की आवश्यकता होगी।
अपने वास्तविक दृष्टिकोण से, मुझे 3 विकल्प दिखाई देते हैं:
1) लेख के अंदर बनाएँ:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
प्रो: सीधे आगे
Const: रखरखाव: लेख ऑब्जेक्ट में विकल्प ऑब्जेक्ट के लिए बिल्डिंग लॉजिक होता है। यह शायद कोड दोहराव को जन्म देगा।
2) एक विकल्प का उपयोग करनाफैक्टरी
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
प्रो: बिल्डिंग लॉजिक आर्टिकल क्लास से बाहर नहीं है
कॉन्स्ट: मैं "स्टेटिक टू मॉक कठिन है" नियम को तोड़ रहा हूं, जिससे मेरा आर्टिकल क्लास को टेस्ट करना कठिन हो गया है।
3) सभी लॉजिक्स को अलग करें।
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
प्रो: अनुच्छेद केवल अपनी जिम्मेदारी को संभालता है, और विकल्पों के लिए अपने "पिता" लिंक की परवाह नहीं करता है। चीजें वास्तव में डिकूप्ड हैं
Const: नियंत्रक के अंदर अधिक कोड की आवश्यकता होगी हर बार मुझे विकल्प तक पहुंचने की आवश्यकता होगी। इसका मतलब है कि मुझे कभी भी किसी वस्तु के अंदर एक फैक्ट्री का उपयोग नहीं करना चाहिए , और वह ध्वनि मेरे लिए एक तरह का है ...
सबसे अच्छा तरीका क्या है? (क्या मुझे कुछ याद आया?) धन्यवाद।
संपादित करें:
यह उल्लेख नहीं करने के लिए कि अगर मैं कारखाने को कक्षा के अंदर नहीं कह सकता, तो मैं यह दावा कर सकता हूँ कि मैं कभी भी आलसी आरंभीकरण पैटर्न का उपयोग नहीं कर सकता ...