45

मैं थोड़ी देर के लिए एमवीसी ढांचे का उपयोग कर रहा हूं और मुझे वास्तव में चिंताएं अलग-अलग कैसे हैं। मुझे नियंत्रकों को काफी काम करने की बुरी आदत मिली है। तो मैं वास्तव में कुछ सलाह की तलाश में हूं।सेवा परतें और रिपोजिटरीज

जब मैंने पहली बार एमवीसी का उपयोग करना शुरू किया, तो अक्सर डेटाबेस काम करने के बाद मॉडलों पर नियंत्रक मैनिपुलेशन कर रहा था। मुझे पता था कि यह बुरा था इसलिए मॉडल में काम करने लगे। हालांकि मैं इससे खुश नहीं हूं क्योंकि मैं चाहता हूं कि मेरे मॉडल बहुत सीखें।

मैंने कुछ पढ़ा है और मैं देखता हूं कि लोग सेवा नियंत्रक के द्वारा अपने नियंत्रकों और मॉडलों को दुबला रखते हैं, जिन्हें मैं देखना चाहता हूं।

मैं बस यह समझने की कोशिश कर रहा हूं कि एक सेवा परत और भंडार कैसे सभी एक साथ काम करना चाहिए। यहां मेरी धारणाएं हैं, क्या आप कृपया मुझे बता सकते हैं कि यह काम करने का एक अच्छा तरीका है?

  1. कोई हेरफेर डेटा पर और ऐसी सेवा परत के रूप में किया जाना चाहिए अगर (व्यापार तर्क शामिल करने के लिए
  2. एक बार किसी भी काम के आंकड़ों के लिए किया जाना चाहिए की जरूरत नहीं है नियंत्रक सीधे भंडार कॉल कर सकते हैं) तो यह सेवा परत में किया जाना चाहिए और नियंत्रक सेवा परत को एक आसान कॉल करेगा जब आवश्यक हो
  3. एक बार सेवा ने यह व्यवसाय तर्क किया है, तो यह आवश्यकतानुसार भंडार का उपयोग करेगा (यदि डेटा की आवश्यकता है बने रहें)।
  4. मॉडल आदर्श रूप से दुबला, आदर्श कार्य करना चाहिए क्योंकि डीटीओ
  5. डेटा के सत्यापन मॉडलों के भीतर किया जाएगा (मोनोरेल सत्यापन गुणों का उपयोग करके)। मैं सराहना करता हूं कि कोई भी अपने मॉडलों को बहुत सारे गुणों के साथ प्रदूषित नहीं करता है, लेकिन यह एक अलग चर्चा है। मुझे यूआई में स्वचालित jQuery सत्यापन के लिए मोनोरेल के सत्यापन गुणों का लाभ पसंद है।

मैं अपने सभी कोड को एक ही जिम्मेदारी सिद्धांत में बदलने की कोशिश कर रहा हूं, इसलिए मेरे कोडिंग प्रथाओं को हल करने का प्रयास कर रहा हूं।

धन्यवाद

उत्तर

25

पहले, नियमों का कोई सेट है कि हर स्थिति में काम करने के लिए जा रहा है नहीं है। आप कैसे मॉडल बनाते हैं इस परियोजना के प्रकार और जटिलता पर बहुत निर्भर करता है। ऐसा कहकर, यहां कुछ विचार हैं:

  1. नियंत्रक से भंडार को कॉल करने में कुछ भी गलत नहीं है। बस सुनिश्चित करें कि नियंत्रक में व्यावसायिक तर्क नहीं है।
  2. सेवा (कुछ) व्यवसाय तर्क का ख्याल रखती है और ऐसा करने के लिए अन्य सेवाओं का उपयोग करती है। भंडार एक प्रकार की सेवा है, इसे सेवा से कॉल करने में कुछ भी गलत नहीं है।
  3. मॉडल में व्यापार तर्क होना चाहिए, वास्तव में आपको हमेशा मॉडल में इसे रखने की कोशिश करनी चाहिए। यदि आपको उस व्यावसायिक तर्क (किसी अन्य मॉडल से या भंडार से) करने के लिए बाहरी डेटा की आवश्यकता है तो आपको एक सेवा बनाना चाहिए।
  4. मॉडल में सत्यापन के साथ कुछ भी गलत नहीं है। गुणों का उपयोग करना या नहीं स्वाद का सवाल है (यदि आपको यह पसंद है तो यह अच्छा है)। मॉडल के बाहर सत्यापन को ले जाएं यदि यह बहुत जटिल हो जाता है (नियमों का बाहरी सेट बनाएं)।

सबसे महत्वपूर्ण, जो सही लगता है (आमतौर पर सही जवाब है) करें।

+0

मॉडलों में व्यवसाय तर्क डालने के साथ मेरी एकमात्र चिंता यह है कि जब संपत्तिबैग (या हालांकि) के माध्यम से यूआई में मॉडलों के संग्रह पास करते हैं, तो आप यूआई को व्यावसायिक तर्क खोल रहे हैं। –

+3

मैं आपकी टिप्पणियों से सहमत हूं, मुझे लगता है कि एक अलग सेवा परत में एक बहुत ही व्यावसायिक तर्क संग्रहित किया जाना चाहिए। अपने मॉडल, दृश्य और नियंत्रकों को यथासंभव छोटे – StevenMcD

5

इयान कूपर ने अभी इस विषय पर The Fat Controller नामक एक ब्लॉग पोस्ट लिखा है।

5

This वीडियो आपके एएसपीनेट एमवीसी समाधान को व्यवस्थित करने और चिंताओं को अलग करने और बेहतर टेस्टेबिलिटी को व्यवस्थित करने में बड़ी अंतर्दृष्टि प्रदान करता है। उम्मीद है कि यह किसी और की भी मदद करेगा। मैंने इससे कुछ अच्छी चीजें सीखीं।

+1

को एक बहुत ही उपयोगी वीडियो रखने की कोशिश करें। इसके साथ-साथ स्रोत कोड भी यहां पाया जा सकता है: https://bitbucket.org/ardalis/guestbook/src –

संबंधित मुद्दे