के साथ फ्लाईवेट और फैक्टरी समस्या मुझे मानसिक रूप से एक फ्लाईवेट पैटर्न दुविधा में फंस गया प्रतीत होता है।IDISposable
सबसे पहले, चलो कहते हैं कि मैं एक डिस्पोजेबल प्रकार DisposableFiddle
और एक कारखाने FiddleFactory
डालते हैं:
public interface DisposableFiddle : IDisposable
{
// Implements IDisposable
}
public class FiddleFactory
{
public DisposableFiddle CreateFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns a newly created fiddle.
}
}
फिर, मेरी राय में, यह FiddleFactory
के ग्राहक के लिए काफी स्पष्ट है कि कारखाना बनाया बेला के अधिकार का दावा नहीं और यह कि क्लाइंट की जिम्मेदारी है जब वह इसके साथ किए गए पहेली को निपटाने का अधिकार रखता है।
public class FiddleFactory
{
private Dictionary<SomethingThatDifferentiatesFiddles, DisposableFiddle> fiddles = new ...;
public DisposableFiddle CreateFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns an existing fiddle if a corresponding s is found,
// or a newly created fiddle, after adding it to the dictionary,
// if no corresponding s is found.
}
}
तब मैं नैतिक रूप से ही डिस्पोजेबल कारखाना बनाने के लिए बाध्य लग रहा है, के बाद से यह fiddles बनाता है और संदर्भ रखता है:
हालांकि, के बजाय कहना है कि मैं फ्लायवेट पैटर्न का उपयोग करके ग्राहकों के बीच fiddles साझा करना चाहते हैं चलो उनके जीवनकाल के दौरान उनके लिए। लेकिन इससे ग्राहकों को समस्याएं आती हैं जो मानते हैं कि उनके पास झुकाव है और इसलिए उन्हें निपटाना चाहिए।
वास्तव में समस्या है कि मैं कारखाने FiddleFactory
बजाय, कहते हैं, FiddlePool
कहते हैं, और "रचना" विधि CreateFiddle
बजाय GetFiddle
? इस तरह:
public class FiddlePool : IDisposable
{
private Dictionary<SomethingThatDifferentiatesFiddles, DisposableFiddle> fiddles = new ...;
public DisposableFiddle GetFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns an existing fiddle if a corresponding s is found,
// or a newly created fiddle, after adding it to the dictionary,
// if no corresponding s is found.
}
// Implements IDisposable
}
तो यह ग्राहक के लिए स्पष्ट है कि यह वापस आ बेला ही नहीं होगी और यह fiddles निपटान के लिए पूल की जिम्मेदारी है।
या क्या यह केवल आसानी से दस्तावेज़ीकरण के हल हो सकता है?
क्या दुविधा से कोई रास्ता है? क्या कोई दुविधा भी है? :-)
धन्यवाद, पहला व्यक्ति डेमेटर के कानून का बेहतर अनुसरण करता है और दूसरा मेरे समग्र डिजाइन में बेहतर फिट बैठता है। हमम ... –
मैं अपने दो सेंट को पहले दृष्टिकोण के लिए रखूंगा - मैंने देखा है कि बहुत से लोग अपने स्वयं के एसक्यूएल कनेक्शन पूल लिखने की कोशिश करते हैं! (वास्तव में नहीं, लेकिन मुझे * यह समझाना पड़ा कि यह जरूरी क्यों नहीं है।) –