2013-06-01 4 views
5

मैं पूरे दिन स्टैक ओवरव्लो और अन्य साइटों पर लेखों को सर्वोत्तम वास्तुकला प्रथाओं के बारे में पढ़ रहा हूं और वहां बहुत सारे विवादित विचार और राय हैं।यदि इकाई फ्रेमवर्क/डीबीकॉन्टेक्स्ट डीएएल/रिपोजिटरी है, तो यह 3-स्तरीय आर्किटेक्चर के भीतर फिट है?

मैं अंततः एक दृष्टिकोण पर बस गया हूं, लेकिन मुझे यह तय करने में वास्तव में कठिन समय है कि ईएफ ऑब्जेक्ट्स (डीबीकॉन्टेक्स्ट, फ्लुएंट एपीआई, सीडिंग डेटा इत्यादि) कहां रखा जाए। यहां मेरे पास वर्तमान में है:

एएसपी.नेट एमवीसी प्रोजेक्ट: वास्तविक वेब प्रोजेक्ट। मानक दृश्य, नियंत्रक और दृश्य मॉडल शामिल हैं (मॉडल फ़ोल्डर के अंदर)।

डोमेन मॉडल प्रोजेक्ट: डेटाबेस (डोमेन) ऑब्जेक्ट्स को परिभाषित करने वाले सभी पीओसीओ वर्ग शामिल हैं। वर्तमान में, किसी भी ईएफ वस्तुओं का उल्लेख या संदर्भ नहीं है।

सेवा परत परियोजना: प्रत्येक प्रकार के डोमेन ऑब्जेक्ट (उदाहरण के लिए, आईपॉडक्ट सेवा, IOrderService, आदि) के लिए सेवा ऑब्जेक्ट्स शामिल हैं। प्रत्येक सेवा ईएफ ऑब्जेक्ट्स जैसे डीबीसेट्स और हैंडल बिजनेस नियमों का संदर्भ देती है - उदाहरण के लिए, एक उत्पाद जोड़ें, उत्पाद प्राप्त करें, ऑर्डर में उत्पाद संलग्न करें, आदि

तो सवाल यह है कि, इस कॉन्फ़िगरेशन में, ईएफ कक्षाएं कहां जाती हैं? शुरुआत में मैंने सेवा परत में सोचा था, लेकिन ऐसा लगता है कि यह समझ में नहीं आता है। मैंने उन्हें डोमेन मॉडल लेयर में रखने का विचार किया, लेकिन फिर यह डोमेन मॉडल को ईएफ से जोड़ता है, जो अनिवार्य रूप से एक डीएएल/रिपोजिटरी है। आखिरकार, मैंने सिर्फ ईएफ के लिए एक अलग डीएएल प्रोजेक्ट बनाने के बारे में सोचा, लेकिन ऐसा लगता है कि इसमें बड़ी कचरे की तरह लगता है कि इसमें 3-4 फाइलें होंगी (डीबीकॉन्टेक्स्ट और कुछ अन्य छोटी फाइलें)।

कोई भी कोई मार्गदर्शन प्रदान कर सकता है?

+0

केवल एक की बजाय तीन परियोजनाएं बनाने के लिए आपको क्या चल रहा है? –

+0

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

उत्तर

3

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

+0

मैं ईएफ कोड का उपयोग कर रहा हूं, इसलिए मैं खुद पीओसीओ कक्षाएं बना रहा हूं। हालांकि, मैं इस धारणा के तहत था कि मेरा डोमेन मॉडल पूरी तरह से पीओसीओ कक्षाएं होनी चाहिए, और ईएफ डीबीकॉन्टेक्स्ट एट अल को कहीं और रहना चाहिए। क्या यह गलत है? – Amberite

+0

सनी की तरह संदर्भित - अपने पीओसीओ कक्षाएं लें और अपने समाधान के भीतर एक नई परियोजना बनाएं जिसमें केवल आपके पीओसीओ कक्षाएं हों (न कि आपके डीबीकॉन्टेक्स्ट) .. कि असेंबली बहुत हल्की हो सकती है और ईएफ पर निर्भरता की आवश्यकता नहीं है। आपका डीबीसीएन्टेक्स्ट आपके डब्ल्यूपीएफ/विनफॉर्म/वेबफॉर्म/एमवीसी/सिल्वरलाइट/जो भी असेंबली में जाएगा जो ईएफ पर निर्भर करेगा। यह सबसे अच्छा तरीका है और जिसे आप आमतौर पर माइक्रोसॉफ्ट देखते हैं, पहले ईएफ कोड दिखाते समय प्रदर्शित करते हैं। –

+0

@ डेरेक कर्टिस: समस्या यह है कि अगर मैं एमवीसी प्रोजेक्ट में डीबीकॉन्टेक्स्ट डालता हूं, तो सर्विस लेयर को एमवीसी प्रोजेक्ट का संदर्भ देने की आवश्यकता होती है, और एमवीसी प्रोजेक्ट को सर्विस लेयर को संदर्भित करने की भी आवश्यकता होती है। एक परिपत्र संदर्भ की तरह लगता है? – Amberite

3

यहाँ मैं क्या कर रहा है:

डाटा:

  • एक वर्ग DbContext से इनहेरिट है।
    • इसमें सभी डीबी सेट हैं।
    • ऑनमोडेल क्रिएटिंग ओवरराइड करता है।
    • प्राथमिक कुंजी और रिश्तों को मानचित्रण करना।

संस्थाओं:

  • हर POCO वर्गों है।
    • प्रत्येक संपत्ति आवश्यक डेटा एनोटेशन के साथ सजाया गया है।

सेवाएं:

  • प्रत्येक सेवा सामान्य तरीके है (GetList(), का पता लगाएं,(), बनाएँ(), आदि)।

व्यवसाय:

  • , ग्राहकों से कहा जाता है एक विशेष कार्य UserChangePassword (यह जांच करेगा कि यह किया जा सकता है, तो कार्य को, या त्रुटि/अनधिकृत स्थितियां वापसी करने वाले कई लोगों को करने के लिए सेवाओं का उपयोग कर रच दूसरों

ग्राहकों (डेस्कटॉप/वेब/WPF/आदि) ग्राहक कार्य के बारे में सही जानकारी से पता चलता बनाने के लिए। मेरे मामले पर यह मैं कहाँ लॉग ऑन है।।

मैं यह नहीं कह रहा हूं कि यह सबसे अच्छा तरीका है, मैं सिर्फ यह साझा कर रहा हूं कि मेरे लिए क्या काम कर रहा है।

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