c# - चक्रीय निर्भरता




asp.net-mvc dependencies (3)

इंटरफेस निकालें और उन्हें अलग विधानसभा में रखें। चूंकि आप MVC वास्तुकला का उपयोग कर रहे हैं, इसलिए इसे कठिन नहीं होना चाहिए। उदाहरणों और अच्छे अभ्यासों के लिए माइक्रोसॉफ्ट कम्पोजिट यूआई एप्लीकेशन ब्लॉक पर एक नज़र डालें

WinForms का उपयोग करते हुए MVC पैटर्न पर आधारित एक सामान्य ग्राहक-आदेश आवेदन पर विचार करें। दृश्य भाग में बहुत अधिक (4000 से अधिक फ़ाइलें) बढ़ी है और इसे छोटे में विभाजित करने की आवश्यकता है

इस उदाहरण के लिए हम दृश्य भाग के लिए 3 परियोजनाओं का उपयोग करने जा रहे हैं:

  • मुख्य - अन्य 2 परियोजनाओं के लिए निर्भरताएं हैं सूचियों के साथ रूपों को इन्स्टैंट करता है
  • ग्राहक - 2 रूप हैं - ग्राहक सूची और ग्राहक विवरण।
  • आदेश - 2 रूप हैं - ऑर्डर सूची और ऑर्डर विवरण।

ग्राहक के विवरण के रूप में उस ग्राहक के आदेशों की एक सूची भी है। सूची ऑर्डर कंट्रोलर से प्राप्त हुई है, इसलिए इसे प्राप्त करने में कोई समस्या नहीं है। जब उपयोगकर्ता कोई ऑर्डर चुनता है, तो सूची उसे दिशानिर्देश देती है और इसे ऑर्डर विवरण फॉर्म के संदर्भ में पास करती है I

इसका मतलब यह होगा कि ग्राहक परियोजना में आदेश परियोजनाओं के संदर्भ में हमारे पास एक संदर्भ होना चाहिए। (1)

लेकिन आदेश के विवरण के रूप में उस ग्राहक के लिए एक लिंक भी है जो उस आदेश को बनाया। जब क्लिक किया जाए, तो उसे ग्राहक विवरण फ़ॉर्म खोलना चाहिए।

इसका मतलब यह होगा कि हमें ऑर्डर्स प्रोजेक्ट में ग्राहकों के प्रोजेक्ट का एक संदर्भ होना चाहिए। (2)

(1) और (2) से हमें ऑर्डर और ग्राहक परियोजनाओं के बीच चक्रीय निर्भरताएं होंगी

यह कैसे बचा जा सकता है? किसी तरह का प्लग-इन आर्किटेक्चर? यह परियोजना पहले ही विकसित हो चुकी है और संभवतया जितना संभव हो उतना कम कोड परिवर्तन के रूप में सबसे अच्छा समाधान शामिल होगा।


कम से कम एक प्रकार के अंतरफलक को बदलें।

उदाहरण के लिए एक ICustomer इंटरफ़ेस और एक ग्राहक प्रकार है जो इस इंटरफ़ेस को लागू करता है। अब आईसी ग्राहक को ऑर्डर प्रोजेक्ट में जोड़ें और ग्राहक प्रोजेक्ट से ऑर्डर्स प्रोजेक्ट के संदर्भ सेट करें ताकि आप इंटरफ़ेस को लागू कर सकें। ऑर्डर प्रकार अब वास्तविक कार्यान्वयन को जानने के बिना ICustomer प्रकार के खिलाफ काम कर सकता है।

और एक बेहतर समाधान के लिए :-) एक ICustomer और IOrder इंटरफ़ेस दोनों बनाएँ और उन्हें एक तीसरी लाइब्रेरी प्रोजेक्ट में जोड़ें। और इस परियोजना को दूसरे दो से और केवल इंटरफेस के साथ काम करते हैं, कभी भी अपूर्णता के साथ नहीं।


यदि वे हैं तो कसकर युग्मित हो सकता है उन्हें विभाजित नहीं किया जाना चाहिए।





dependencies