हम कुछ विरासत सॉफ्टवेयर को फिर से डिजाइन करने की प्रक्रिया में अधिक परीक्षण करने योग्य हैं और निर्भरता-इंजेक्शन और कैसल पर निर्णय लेते हैं। विन्डसर हमारी मदद करने के लिए।महल-विंडसर में एकाधिक सजावटी पैटर्न
पहला, हमारा लक्ष्य: * कई सजावटकर्ता जो डेटा स्ट्रीम पर काम करते हैं। * सजावट के कई संयोजन संभव हैं और विभिन्न स्थानों से डेटा प्राप्त करने के लिए प्रत्येक मामले में रूट नोड्स की आवश्यकता हो सकती है।
interface IUpdateableValue<T>
{
T Get();
};
हम जैसे हैं:
तकनीकी तौर पर, हमारे डिजाइन इस प्रकार है
JsonParser(
Decompressor(
Decrypter(decryptionKey
FileCache(filename,
HttpWebDownloader(url))))
XmlParser(
Decompressor(
Decrypter(decryptionKey2
FileCache(filename2,
HttpWebDownloader(url2))))
मैं मुसीबत डिजाइन बाहर हो रही कैसल-विंडसर की तरह एक डि-ढांचे में फिट करने के लिए हो रही है: डेटा के तीन सेट घटकों के एक नंबर, सभी को लागू करने IUpdateableValue() (छद्म कोड) के साथ प्राप्त किया करने के लिए । मुझे संदेह है कि इसमें से कुछ नामित उदाहरणों से संभाला जा सकता है, लेकिन यह इस उपयोग के लिए बदबूदार लगता है।
विचार यह है कि उदाहरण के "उपयोगकर्ता" JsonParser और XmlParser उदाहरणों को पता नहीं है (या परवाह है) क्या डेटा HttpUrl से आता है, एक फ़ाइल या जादुई रूप से टोपी से बाहर खींच लिया जाता है।
मुझे लगता है कि हमारे डिजाइन में कुछ गड़बड़ है, लेकिन यह ठीक नहीं है कि इसे कैसे ठीक किया जाए।
प्रगति पर कैसे कोई विचार है?
यहां विंडसर में जेनेरिक सजावटी के साथ काम करने के बारे में प्रश्न हैं (जैसे [यह एक] (http://stackoverflow.com/questions/9888019)), लेकिन मुझे किसी को भी उत्तर देने की याद नहीं है, इसलिए मुझे उम्मीद है कि विंडसर के साथ ऐसा करना मुश्किल होगा। ऑटोफैक या सरल इंजेक्टर जैसे अन्य कंटेनर, अधिक सफलता प्राप्त कर सकते हैं। शायद [सामान्य विकिरणकर्ताओं को पंजीकृत करने के बारे में यह विकी पृष्ठ] (सरल इंजेक्टर में http://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Generic_Decorators) आपको अपने सिस्टम को डिज़ाइन करने के बारे में कुछ विचार दे सकता है। – Steven
आप इसके लिए कैसल का उपयोग क्यों करेंगे? यह क्या लाभ प्रदान करेगा? –