5

के साथ फैक्टरी का उपयोग करना ठीक है, इसलिए मुझे एक असाइनमेंट दिया गया है जहां मुझे रणनीति और फैक्टरी डिजाइन पैटर्न दोनों का उपयोग करने के लिए कहा जाता है। यहां समस्या है:रणनीति डिजाइन पैटर्न

आप ऋण को संभालने के लिए उपयोग करने के लिए बैंक के लिए एक आवेदन विकसित कर रहे हैं। capital() विधि के साथ Loan कक्षा है। capital() विधि में एक बदसूरत अगर-फिर-और सशर्त होता है जो कुछ ऋण ऑब्जेक्ट आवृत्ति विशेषताओं की जांच करता है और गुणों के आधार पर ऋण प्रकार के लिए सही रणनीति का उपयोग करता है।

capital() { 
    if (expiry == null && maturity != null) { 
     // Find capital for term loan 
     return commitment * duration * riskFactor; 
    } 
    if (expiry != null && maturity == null) { 
     if (getUnusedPercentage() != 1.0) { 
      // Find capital for revolving loan 
      return commitment * unusedPercentage * duration * riskFactor; 
     } else { 
      // Find capital for complex loan 
      return (outstandingRiskAmount * duration * riskFactor) + (unusedRiskAmount * duration * unusedRiskFactor); 
     } 
    } 
} 

हम इस डिज़ाइन को रणनीति पैटर्न लागू करने के लिए चाहते हैं: यहाँ capital() विधि के लिए छद्म-कोड है। ऐसी फैक्ट्री बनाएं जो उचित रणनीति वस्तु बनाती है। फैक्ट्री को सिंगलटन क्लास बनाएं। एक यूएमएल आरेख बनाएं और capital() विधि को प्रतिस्थापित करने के लिए सामना करने वाले स्निपेट लिखें। याद रखें: एक रणनीति का उपयोग करने के बारे में महत्वपूर्ण बात: क्लाइंट को एक संदर्भ वस्तु प्रदान करनी चाहिए।

ठीक है, इसलिए मैंने एक यूएमएल आरेख तैयार किया है। मैं सिंगलटन की मेरी समझ पर बहुत ठोस हूं इसलिए मुझे लगता है कि मुझे वह पेट मिला है। मुझे लगता है कि मैं रणनीति को अच्छी तरह से समझता हूं। हालांकि, मुझे अपने आप को यह विश्वास करने में परेशानी हो रही है कि कारखाने के साथ मेरे पास सेटअप रणनीति वस्तुएं बनाने के लिए इस बारे में जाने का सबसे अच्छा तरीका है। Check out my diagram here। मैं एक क्लाइंट ऑब्जेक्ट लिखने की योजना बना रहा हूं जो ऋण का उपयोग संदर्भ वस्तु के रूप में ऋण का उपयोग करता है (इसे कारखाने के साथ बनाकर ऋण कन्स्ट्रक्टर के माध्यम से उपयुक्त रणनीति के साथ शुरू करना)। capital() विधि तब बस उस रणनीति को निष्पादित करेगी जिसके साथ इसे कॉन्फ़िगर किया गया है। अगर मेरी समझ सही है, तो जिस तरह से मेरे पास कारखाने की स्थापना की गई है, वह इंडेक्शन की एक परत जोड़कर रणनीति से ऋण (संदर्भ) को पूरी तरह से खत्म करने की सेवा कर रहा है।

एक बात मुझे यकीन नहीं है कि मूल पूंजी विधि के अंदर होने वाली गणना के दौरान उपयोग किए जाने वाले डेटा को कैसे प्राप्त किया जाए। कुछ रणनीतियों के लिए केवल कुछ पैरामीटर का उपयोग किया जाता है (टर्म लोन के लिए केवल प्रतिबद्धता, अवधि, और जोखिम फैक्टर का उपयोग किया जाता है, हालांकि जटिल ऋण ऋण के सभी उपलब्ध विशेषताओं का उपयोग करते हैं)। क्या मेरी calculateCapital() विधि, जो सभी रणनीतियों द्वारा कार्यान्वित की गई है, में सभी छह गुण पैरामीटर के रूप में हैं?

बेहतर परिणाम प्राप्त करने के लिए रणनीति पैटर्न के साथ फैक्टरी का उपयोग करने का एक बेहतर तरीका है? क्या मुझे इसके बजाय सार फैक्ट्री या फैक्टरी विधि का उपयोग करना चाहिए?

कारखाने उपयुक्त रणनीति बनाना चाहिए:

+0

और सवाल होगा ...? – Isaac

+0

शायद संबंधित: http://stackoverflow.com/questions/5375187/strategy-design-pattern-and-factory-method-design-pattern। भी: http: //www.codeproject।कॉम/लेख/9942/रिफैक्टरिंग-टू-पैटर्न-फैक्ट्री-एंड-स्ट्रैटेजी-पेटी और http://social.msdn.microsoft.com/Forums/is/architecturegeneral/thread/8218054d-969c-4066-ba05-24553f890465 –

उत्तर

10

यहाँ यह सवाल मेरी व्याख्या और मेरा उत्तर है। यह केवल ऋण के गुणों के बारे में जानता है तो यह कर सकता है। इसलिए कारखाने को जो भी इंजेक्शन विधि पसंद है, उसके माध्यम से ऋण दिया जाना चाहिए, और उसके बाद ऋण की संपत्तियों का उपयोग यह तय करने के लिए करें कि कौन सी रणनीति वापस देनी है।

तो अब आपके पास एक रणनीति है जो ऋण के प्रकार के लिए उपयुक्त है, आपको पूंजी की गणना करनी होगी। फिर, यह ऋण के गुणों पर निर्भर करता है। इसलिए, रणनीति को ऋण की जरूरत है। इसे फैक्ट्री में या पूंजी/गणना कैपिटल विधि के पैरामीटर के माध्यम से इंजेक्शन दिया जा सकता है।

यह इसे अच्छा और सरल, ढीला युग्मित और सार रखता है।

कुछ की तरह:

ICapitalStrategy s = LoanStrategyFactory.Create(loan); 
s.CalculateCapital(loan); 
संबंधित मुद्दे