2010-06-28 13 views
5

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

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

अब ऐसा करने का एक और तरीका ग्राहक वर्ग में उस अतिरिक्त कोड को रखना होगा और उस वर्ग में आईएसशन (या आईरिपोजिटरी, जो भी शब्दावली हम उपयोग करते हैं) भेज देंगे। और कोई सेवाएं नहीं है। आम तौर पर, ग्राहक, आदेश, उत्पाद, आदि कक्षाएं मॉडल कक्षाएं होती हैं, जिससे परिणामस्वरूप बड़े/भारी मॉडल वर्ग होते हैं।

मेरा सवाल है, कौन सा समाधान बेहतर है? अब तक मुझे इसकी आवश्यकता नहीं थी क्योंकि मेरे पास नियंत्रकों में अधिकांश कोड था लेकिन अब जब मेरा आवेदन बढ़ता है, तो मुझे इस पर निर्णय लेने और नियंत्रकों को साफ करने की आवश्यकता है।

वर्तमान में मेरे पास है: - व्यापार तर्क के साथ वसा नियंत्रकों उस में, - बहुत परमाणु खजाने, - बहुत साफ मॉडल और ViewModels। अधिक कोड के साथ खजाने, - - - पतली नियंत्रकों, व्यापार तर्क कोड के साथ मॉडल (विशेष रूप से अपने मॉडल वर्गों की तरह जोड़ें(), निकालें() तरीकों को शामिल करना चाहिए, उदाहरण के Customer.Remove के लिए:

मैं पर जाना चाहिए() ??)

या के लिए - पतली नियंत्रकों, - परमाणु खजाने, - अभी भी साफ मॉडल, - सेवाएं (सब कुछ है कि पिछले में से किसी में नहीं जाता संपुटित के लिए)।

उत्तर

7

मैं आपको मॉडल कक्षाओं और सेवा परत के साथ परमाणु संचालन वाले भंडार रखने की सलाह दूंगा जो व्यापारिक परिचालन को परिभाषित करने के लिए उन भंडारों पर निर्भर करता है। एओपी की अवधारणा का उपयोग प्रत्येक व्यापार संचालन की शुरुआत में स्वचालित रूप से एसक्यूएल लेनदेन शुरू करने और अपवाद के मामले में अंत या रोलबैक पर प्रतिबद्ध करने के लिए किया जा सकता है।

अंत में नियंत्रक उन सेवा वर्गों का उपयोग करेंगे और डोमेन मॉडल के बीच परिवर्तित होंगे और मॉडल देखेंगे।

+2

डिट्टो, सिवाय इसके कि मैं सेवा के अंदर दृश्य मॉडल में कनवर्ट करता हूं ताकि नियंत्रक मेरे डोमेन मॉडल पर विधियों को कॉल न कर सके। – Ryan

+0

यह एक अच्छा अभ्यास है हालांकि मेरे मॉडल के पास केवल फ़ील्ड/गुणों का कोई तरीका नहीं है। – mare

+0

यही कारण है कि आपको भंडार होना चाहिए। –

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