2010-02-03 6 views
6

पुस्तक डोमेन प्रेरित डिजाइन, एरिक इवांस के अलावा, "कारखानों" (पेज 139) पर खंड में अध्याय 6 में यह निम्नलिखित कहते हैं:डीडीडी बुक, एरिक इवांस: इसका मतलब क्या है "फैक्ट्री को कंक्रीट क्लास (एसएस) के बजाय वांछित प्रकार के लिए सारणीबद्ध किया जाना चाहिए।"

"दो बुनियादी किसी भी अच्छे फैक्टरी के लिए आवश्यकताएँ हैं:

...

"2। फैक्टरी प्रकार ठोस वर्ग (ते) बनाया बजाय वांछित को निकाला जाना चाहिए। "

आप क्या बुनियादी आवश्यकता संख्या के बारे में है कि बयान का क्या मतलब है पर विस्तृत कृपया सकते हैं 2.

उत्तर

8

कार्लोस लोथ का जवाब सही है, लेकिन आपको हमेशा Abstract Factory का उपयोग करना याद रखना चाहिए, क्योंकि यह उपभोक्ताओं को कंक्रीट कारखानों या प्रकारों को जोड़ने के बिना कंक्रीट प्रकारों को कंक्रीट कारखानों को जोड़ने की अनुमति देगा।

public interface ISomethingFactory 
{ 
    ISomething Create(); 
} 

public class SomethingFactory : ISomethingFactory 
{ 
    public ISomething Create() 
    { 
     return new Something(); 
    } 
} 
10

मुझे लगता है कि आप का मतलब कभी भी अपने फैक्ट्री से एक ठोस प्रकार नहीं लौटना चाहिए। उदाहरण के लिए, यदि आपके पास इंटरफ़ेस है, तो आइओसमिंग, एक एस्ट्र क्लास समथिंगबेस और आखिरकार कुछ कक्षाएं जो इस इंटरफ़ेस को कार्यान्वित करती हैं और बेस क्लास से प्राप्त होती हैं। आपकी सृजन विधि को इंटरफ़ेस प्रकार वापस करना चाहिए , आधार प्रकार का पूर्णांक। मुझे लगता है कि यह विचार है।

public ISomething Create() { ... } 

इसके बजाय

public SomethingBase Create() { ... } 

की मुझे आशा है कि यह मदद करता है, कार्लोस।

+0

आपके त्वरित उत्तर के लिए धन्यवाद। यद्यपि मैं अभी भी थोड़ी उलझन में हूं क्योंकि यह बाद में किताब (पी .143 के नीचे) में भी कहता है "फैक्ट्री उत्पादों की ठोस वर्ग के साथ मिलकर है;" सौभाग्य से मैं php में विकास कर रहा हूं, इसलिए 'रिटर्न टाइप' 'तकनीकी रूप से किसी भी मुद्दे पर बहुत अधिक नहीं हैं (हालांकि अवधारणात्मक रूप से अभी भी महत्वपूर्ण) –

+3

मुझे लगता है कि यह ऐसा कहता है क्योंकि ज्यादातर मामलों में आप कंक्रीट क्लास को बनाएं विधि के अंदर तत्काल बनाते हैं नया ऑपरेटर इस प्रकार, आपके पास रचनात्मक विधि और ठोस प्रकार के बीच एक मजबूत युग्मन होगा। आपके उपभोक्ता जरूरी नहीं कि कंक्रीट प्रकार, केवल इंटरफ़ेस का संदर्भ लें। हालांकि कारखाने वर्ग को ठोस प्रकार का संदर्भ देने की आवश्यकता होगी। –

+0

मुझे लगता है कि मैं देखता हूं। इसलिए, मूल रूप से कंक्रीट-विशिष्ट कार्यान्वयन को ढालने के लिए जितना संभव हो सके कारखाने वर्गों के हस्ताक्षर और वापसी प्रकारों को रखने के लिए विभिन्न रचनात्मक पैटर्न (गोफ) का उपयोग करें। लेकिन आपके पास अभी भी एक कारखाना वर्ग हो सकता है जो कि एक ठोस डोमेन ऑब्जेक्ट से जुड़ा हुआ है जब तक कि इसका इंटरफ़ेस सामान्य हो। तो, लैंपशैड फैक्ट्री और सोफा फैक्ट्री तब भी ठीक है जब तक वे फर्नीचर फैक्ट्री के अमूर्त इंटरफ़ेस के पीछे छिपे रहते हैं। –