c# - Which design pattern allows to get this architecture -
मेरे पास निम्न ऑब्जेक्ट हैं:
- फॉर्मूला
- स्टॉक < / Li>
- काउंटर
- आदि ...
इन सभी वस्तुओं को संकेतक कहा जाता है और उनके पास सामान्य गुण हैं (आईडी, नाम, मान ...)। प्रत्येक इकाई की अपनी संपत्तियां हैं:
- फॉर्मूला: फॉर्मूला एक्सक्शन, फॉर्मूला कोड, ऑपरांड सूची ...
- स्टॉक: स्टॉक वैल्यू, स्टॉकलिमिट ...
- काउंटर : काउंटर इंडेक्स ...
- आदि ...
इतना तार्किक रूप से, मुझे सामान्य गुण वाले सूचक वर्ग बनाना पड़ता है, और प्रत्येक इकाई के लिए मुझे वर्ग जो सूचक से प्राप्त होता है।
सूत्र एक विशेष सूचक है जिसमें किसी भी प्रकार के संकेतक शामिल हो सकते हैं। फार्मूले के संकेतकों को ऑपरेंड नाम दिया गया है।
ऑपरेंड ऑब्जेक्ट में निम्न गुण हैं: ऑपरेंडआईडी, ऑपरेंड कोड, ऑपरेंड इंडेक्स
जब मैं सूत्र परिपथों को सूचीबद्ध करना चाहता हूं, तो मुझे ऑब्जेक्ट प्राप्त करना है जो सूचक, प्रचालिपि और संस्था प्रकार से प्राप्त होता है (उदाहरण के लिए संकेतक गुण, प्रचालिपि गुण और स्टॉक गुण वाले वस्तु को बनाते हैं)
कौन से डिजाइन पैटर्न या कौन से आर्किटेक्चर मुझे यह व्यवहार करने की अनुमति देता है?
अधिक समझाने के लिए समस्या
संस्थाओं (
फॉर्मूला ,
स्टॉक ,
काउंटर ..)
संकेतक हैं और आवश्यक नहीं है
संचालन ,
संचालन भी
संकेतक भी हैं ऑब्जेक्ट
इंडिकेटर आदिम प्रकार की संस्थाएं हैं, हम एक
संकेतक बना सकते हैं और फिर इसे एक
formula बनने के लिए सजाने के लिए और इसे सजाने के लिए एक
ऑपरेंड बनें, जब इसे किसी अन्य
फ़ॉर्मूला में जोड़ा जाता है।
यह करने का सबसे अच्छा तरीका एक विस्तार वस्तु का उपयोग करना होगा जो कि प्रत्येक ऑपरेंड द्वारा < मजबूत> बहुरूपृत प्रेषण विस्तार की वस्तु आपको कस्टम गुण जोड़ने देता है, और बहुरूपिक प्रेषण से आप ऑपेरेक्स परिवर्तन के खिलाफ अपना कोड बंद कर सकते हैं।
आप अपने बुनियादी तत्वों वाले ऑपरैंड के लिए एक बेस क्लास का उपयोग करके शुरू कर देंगे < प्री>
सार्वजनिक सार वर्ग ऑपरैण्ड {सार्वजनिक इन्ट आईडी (get; सेट; } सार्वजनिक स्ट्रिंग नाम {get; सेट; } सार्वजनिक गतिशील बिल्डऑबैक्ट () {गतिशील ओ = नया एक्सपांडो ओब्जेक्ट (); ओ। आईडी = आईडी; O.Name = नाम; AddPropertiesToObject (ओ); वापसी ओ; } संरक्षित आंतरिक सार शून्य AddPropertiesToObject (गतिशील ओ); }
फिर एक नया ऑपरेटिंग प्रकार जोड़ना बहुत आसान है क्योंकि आप इसे नियंत्रित कर सकते हैं कि आप इसे स्वतंत्र रूप से क्या जोड़ देंगे:
सार्वजनिक वर्ग स्टॉक: ऑपरैंड {सार्वजनिक डबल स्टॉक वैल्यू {मिल; सेट; } संरक्षित आंतरिक ओवरराइड शून्य AddPropertiesToObject (गतिशील ओ) {// मैंने बेस क्लास आईडी और नाम को अनदेखा करने का निर्णय लिया // उन्हें जोड़ने के लिए तुच्छ होना होगा, लेकिन संभव है कि आपको इसकी आवश्यकता न हो, क्योंकि // मूल मानों को ओवरराइट करेगा ... // उन्हें जोड़ने के लिए आपको इस वर्चुअल पद्धति को कॉल के साथ // एक कॉल करने के लिए फ़ंक्शन को आधार वर्ग o.StockValue = StockValue में सम्मिलन करना होगा; }}
फ़ॉर्मूला ऑब्जेक्ट बस निहित ऑपरेंडों पर पुनरावृत्त होगा और उनके
AddPropertiesToObject बदले में कॉल करेगा (बेशक यह भी जोड़ सकता है अपने स्वयं के आंकड़े लेकिन उदाहरण के लिए मैंने इसमें शामिल नहीं किया है)
सार्वजनिक वर्ग के फॉर्मूला: ऑपरैन्ड {सार्वजनिक सूची & lt; ऑपरेंड & gt; इनरओपरैंड {प्राप्त करें; सेट; } संरक्षित आंतरिक ओवरराइड शून्य AddPropertiesToObject (गतिशील ओ) {foreach (इनरऑपरैंड्स में विभिन्न प्रकार) {op.AddPropertiesToObject (o); }}} पर क्लिक करें
Comments
Post a Comment