2012-01-13 8 views
6

मैं नेट पर नया हूं और चीजों को सीखने की कोशिश कर रहा हूं। मैं, प्रिज्म 4 डब्ल्यूपीएफ ऐप - एमवीवीएम, रिपोजिटरीज और वर्क पैटर्न के यूनिट के साथ समाधान आर्किटेक्चर

  • प्रिज्म v4,
  • एकता आईओसी के रूप में, डेटा संग्रह के रूप में
  • एसक्यूएल सर्वर सीई

    1. दृश्य स्टूडियो CSharp 2010 एक्सप्रेस संस्करण के साथ एक Prism4 WPF अनुप्रयोग विकसित करने के लिए कोशिश कर रहा हूँ।

    मैं एक बहुत (?) का अध्ययन किया और दूसरों के बीच में this और this द्वारा infuenced, और MVVM, भंडार और UnitofWork पैटर्न लागू करने का फैसला किया है।

    1. शैल (आवेदन लेआउट और स्टार्टअप तर्क)
    2. : इस आवेदन (मुझे :-)

      तो, मैं एक समाधान निम्नलिखित परियोजनाओं के साथ बना लिया है एक ही उपयोगकर्ता के साथ एक डेस्कटॉप अनुप्रयोग हो जाएगा आम (अनुप्रयोग बुनियादी ढांचा और कार्यप्रवाह तर्क)

    3. BusinessModuleA (दृश्य और ViewModels)
    4. BusinessModuleA.Model (व्यावसायिक संस्थाओं - POCO)
    5. BusinessModuleA.Data (डेटा संग्रह स्थान, Dat एक एक्सेस (एफई?))
    6. BusinessModuleB (दृश्य और ViewModels)
    7. BusinessModuleB.Model (व्यावसायिक संस्थाओं - POCO)
    8. BusinessModuleB.Data (डेटा संग्रह स्थान, डेटा एक्सेस (एफई?))

    मेरे प्रश्न हैं:

    1. कौन सी परियोजनाओं को संदर्भित करना चाहिए परियोजनाओं?
    2. यदि मैं 'BusinessModuleX.Data' में रेपॉजिटरीज़ को कार्यान्वित करता हूं, जो स्पष्ट है, तो मुझे आईरिपॉजिटरीज़ कहां परिभाषित करनी चाहिए?
    3. मुझे IUnitOfWork को कहां परिभाषित करना चाहिए और मुझे UnitOfWork को कहां कार्यान्वित करना चाहिए?
    4. क्या यह ठीक है अगर मैं अपने ViewModels में UnitOfWork और Repositories का उपभोग करता हूं? इंस्टीट्यूट का कहना है कि यह खराब डिजाइन है।
    5. यदि (4) ऊपर खराब है, तो ViewModel को सेवा परत (अन्य प्रोजेक्ट?) के माध्यम से डेटा प्राप्त करना चाहिए। फिर, हम इकाइयों में परिवर्तनों को ट्रैक कैसे कर सकते हैं ताकि सेवा परत पर उन ऑब्जेक्ट्स पर प्रासंगिक CRUD विधियों को कॉल किया जा सके?
    6. क्या इनमें से कोई भी कोई समझ में आता है या क्या मुझे बड़ी तस्वीर याद आ रही है?

    ठीक है, हो सकता है मैं अपने आप को क्या मैं अपनी पहली पोस्ट में वास्तव में चाहता था पर स्पष्ट नहीं किए हैं। कई जवाब नहीं आ रहे हैं। मैं अभी भी जवाब ढूंढ रहा हूं क्योंकि तत्काल आवश्यकताओं के लिए @Rachel सुझाया गया क्या प्रभावी हो सकता है, मैं सावधान रहना चाहता हूं कि मुझे कोने में खुद को पेंट न करें। मेरे पास एक एक्सेस डीबी है जिसे मैंने कार्यालय में अपने व्यक्तिगत उपयोग के लिए विकसित किया है, और जो कि सफलता की तरह बन गया है और अब 50+ उपयोगकर्ताओं द्वारा उपयोग किया जा रहा है और बढ़ रहा है।एक्सेस कोड बेस को बनाए रखना और संशोधित करना शुरुआत में काफी सरल रहा है, लेकिन जैसे ही ऐप विकसित हुआ, अलग-अलग गिरना शुरू हो गया। यही कारण है कि मैंने नेट/डब्लूपीएफ/प्रिज्म में सबकुछ फिर से लिखना चुना है और यह सुनिश्चित करना चाहता हूं कि मुझे मूल डिजाइन सही हो।

    कृपया चर्चा करें।

    इस बीच, मैं this...

  • उत्तर

    4

    पहले के साथ आया था, मैं अपनी परियोजना सूची एक सा बस Shell, Common, ModuleA, और ModuleB को आसान बनाने में होता है। प्रत्येक प्रोजेक्ट के अंदर मेरे पास सब-फ़ोल्डर्स निर्दिष्ट होंगे कि सब कुछ कहां है। उदाहरण के लिए, ModuleAViews, ViewModels के लिए फ़ोल्डर में विभाजित किया जा सकता है, और Models

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

    आप IUnitOfWork को कैसे कार्यान्वित करते हैं और आपके Repositories शायद आपके मॉड्यूल के आधार पर निर्भर करता है।

    • एक डेटाबेस के लिए अपने पूरे आवेदन लिंक, या शेयरों डेटाबेस ऑब्जेक्ट्स, तो मैं शायद DataAccessLayer के लिए दो और परियोजनाएं बनाने चाहते हैं। एक में सार्वजनिक इंटरफेस/कक्षाएं होंगी जिनका उपयोग आपके मॉड्यूल द्वारा किया जा सकता है, और दूसरे में डेटा एक्सेस लेयर, जैसे एंटीटी फ्रेमवर्क का वास्तविक कार्यान्वयन होगा।

    • प्रत्येक मॉड्यूल अपने आप डेटाबेस, या डेटाबेस में वस्तुओं के अपने स्वयं के सेट है (यानी। ग्राहक वस्तुओं जब तक आप ग्राहक मॉड्यूल स्थापित किया है मौजूद नहीं है), तो मैं मॉड्यूल में IUnitOfWork को लागू करने और होता वे अपने डेटा का उपयोग संभालते हैं। हालांकि, अभी भी मॉड्यूल के निर्माण के लिए Common लाइब्रेरी में कुछ सामान्य इंटरफेस होंगे।

    आदर्श रूप में

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

    यदि आपके व्यू मॉडेल को UnitOfWork या Repository का उपभोग करना चाहिए, तो मैं उन्हें केवल Repository का उपयोग कर दूंगा। आदर्श रूप से आपका Repository एक ब्लैक बॉक्स की तरह होना चाहिए - ViewModels Repository का उपयोग कर डेटा प्राप्त/सहेज सकते हैं, लेकिन यह नहीं पता होना चाहिए कि यह कैसे कार्यान्वित किया गया है। रिपोजिटरीज एक सेवा, इकाई ढांचे, प्रत्यक्ष डेटा पहुंच, या कहीं भी डेटा प्राप्त कर सकते हैं, और ViewModel परवाह नहीं करेगा।

    मैं डिजाइन वास्तुकला पर कोई विशेषज्ञ हूँ, लेकिन है कि मैं इसे कैसे निर्माण होता :)

    +0

    हाय, प्रतिक्रिया के लिए धन्यवाद। एम-वी-वीएम को फ़ोल्डर्स में व्यवस्थित नहीं करता है लेकिन उसी प्रोजेक्ट में उन्हें कसकर जोड़ दिया जाता है? हां, मेरे मॉड्यूल में प्रत्येक का अपना डीबी होता है और पाठ्यक्रम, 'सामान्य' को छोड़कर, अन्य मॉड्यूल से पूरी तरह से असंबंधित/अनजान है। – yoursvsr

    +0

    मेरा चौथा सवाल यूनिटऑफवर्क 'और' रिपोजिटरीज नॉट 'या' का उपयोग करने के बारे में है। मुझे लगता है कि रिपोजिटरीज कन्स्ट्रक्टर हैं जो यूनिटऑफवर्क के साथ अपना काम करने के लिए इंजेक्शन दिए जाते हैं।इसके अलावा, प्रत्येक मॉड्यूल को अपने डेटाएक्सलोगिक को फिर से जोड़कर सभी चीजें हवादार, सही? मुझे आश्चर्य है कि क्या यह ढीला युग्मन और मॉड्यूलर विकास का बहुत मकसद है कि प्रिज्म और ऊपर सूचीबद्ध पैटर्न मैं प्राप्त करने की कोशिश करता हूं। – yoursvsr

    +0

    @yoursvsr ऑब्जेक्ट्स एक प्रोजेक्ट साझा कर सकते हैं और अभी भी decoupled हो सकते हैं। उदाहरण के लिए, एमवीवीएम में केवल वही संदर्भ दिए जाने चाहिए जो आपके मॉडल को संदर्भित करते हुए आपके व्यू मॉडल्स हैं, और आपके दृश्य मॉडल/व्यू मॉडेल का संदर्भ देते हैं। जहां वास्तविक वस्तुओं मौजूद हैं वास्तव में कोई फर्क नहीं पड़ता। – Rachel

    0

    मैं तुम्हें Design Patterns Library प्रशिक्षण वीडियो अंदर Introduction to PRISM और भंडार पैटर्न प्राप्त करने के लिए अत्यधिक की सिफारिश करेंगे है। वे महान हैं। उम्मीद है कि यह

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