हाल ही में मैं अपने कुछ कोड को सुरक्षित करने के बारे में सोच रहा हूं। मैं उत्सुक हूं कि कोई यह सुनिश्चित कर सकता है कि कोई ऑब्जेक्ट सीधे कभी नहीं बनाया जा सकता है, लेकिन केवल फैक्ट्री क्लास की कुछ विधि के माध्यम से। मान लें कि मेरे पास कुछ "व्यावसायिक वस्तु" वर्ग है और मैं यह सुनिश्चित करना चाहता हूं कि इस वर्ग के किसी भी उदाहरण में एक वैध आंतरिक स्थिति होगी। इसे प्राप्त करने के लिए मुझे ऑब्जेक्ट बनाने से पहले कुछ रचना करने की आवश्यकता होगी, शायद इसके कन्स्ट्रक्टर में। यह ठीक है जब तक कि मैं फैसला नहीं करता कि मैं यह चेक व्यापार तर्क का हिस्सा बनना चाहता हूं। तो, मैं किसी व्यवसाय ऑब्जेक्ट को केवल अपने व्यवसाय तर्क वर्ग में कुछ विधि के माध्यम से रचनात्मक होने की व्यवस्था कैसे कर सकता हूं लेकिन सीधे कभी नहीं? सी ++ के अच्छे पुराने "दोस्त" कीवर्ड का उपयोग करने की पहली प्राकृतिक इच्छा सी # के साथ कम हो जाएगी। तो हम अन्य विकल्पों की आवश्यकता है ...सी # में फैक्टरी पैटर्न: ऑब्जेक्ट इंस्टेंस को सुनिश्चित करने के लिए केवल फ़ैक्टरी क्लास द्वारा ही बनाया जा सकता है?
के कुछ उदाहरण कोशिश करते हैं:
public MyBusinessObjectClass
{
public string MyProperty { get; private set; }
public MyBusinessObjectClass (string myProperty)
{
MyProperty = myProperty;
}
}
public MyBusinessLogicClass
{
public MyBusinessObjectClass CreateBusinessObject (string myProperty)
{
// Perform some check on myProperty
if (true /* check is okay */)
return new MyBusinessObjectClass (myProperty);
return null;
}
}
यह सब ठीक है जब तक आप आप अभी भी सीधे MyBusinessObjectClass उदाहरण बना सकते हैं, इनपुट की जाँच के बिना याद है। मैं उस तकनीकी संभावना को पूरी तरह से बाहर करना चाहता हूं।
तो समुदाय इस बारे में क्या सोचता है?
MyBoClass विधि misspelt है? – pradeeptp
मैं उलझन में हूं, आप अपने व्यापारिक वस्तुओं को अपने स्वयं के आविष्कारों की रक्षा के लिए जिम्मेदार क्यों नहीं बनना चाहेंगे? फैक्ट्री पैटर्न (जैसा कि मैं इसे समझता हूं) का बिंदु या तो ए है) कई निर्भरताओं के साथ एक जटिल वर्ग के निर्माण के साथ सौदा करता है या बी) फैक्ट्री को यह तय करने दें कि किस रनटाइम प्रकार को वापस करने के लिए, केवल एक इंटरफेस/सार का खुलासा करना क्लाइंट के लिए वर्ग। अपने व्यापारिक वस्तुओं में अपने व्यवसाय के नियमों को रखना ओओपी का बहुत ही ईसाई है। – kai
@ क्यूई ट्रू, व्यवसाय ऑब्जेक्ट इसके आविष्कार की सुरक्षा के लिए ज़िम्मेदार है, लेकिन ** कन्स्ट्रक्टर कॉलर यह सुनिश्चित करना है कि कन्स्ट्रक्टर ** में उन्हें पास करने से पहले तर्क वैध हैं!'CreateBusinessObject' विधि का उद्देश्य तर्कों को सत्यापित करना है और एक विधि में कॉल करने के लिए वैध हैं या नहीं, जब कॉलर को तुरंत पता नहीं होता है कि कन्स्ट्रक्टर में गुजरने के लिए तर्क वैध हैं या नहीं। – Lightman