2008-11-05 22 views
7

मैं एक ओआरएम के रूप में nhibernate का उपयोग करके मेरी अगली परियोजना (एएसपीएनटी एमवीसी) को लागू करने की योजना बना रहा हूं। चूंकि मुझे निबर्ननेट के साथ अनुभव नहीं है, इसलिए मुझे आश्चर्य है कि मुझे विभिन्न परियोजनाओं के बीच निर्भरताओं को कैसे व्यवस्थित करना चाहिए। मैं एक सिफारिश की दृष्टिकोण के रूप में कुछ इस तरह देखा है:NHibernate वास्तुकला?

  • यूआई मॉडल, डेटा संग्रह स्थान और NHibernate
  • डेटा संग्रह स्थान पर निर्भर करता है मॉडल और Nhibernate पर निर्भर
 

    ----- UI----------------------------- 
    |    |     | 
    |    |     | 
    Model NHibernate 

समस्या मुझे क्या करना है यूआई कोड सीधे निबर्ननेट के साथ बातचीत करने के लिए नहीं चाहते हैं, इसलिए मैं इस तरह कुछ सोच रहा हूं:

  • यूआई मॉडल और फसाड पर निर्भर करता है
  • फसाड मॉडल और Nhibernate पर निर्भर करता है
----- यूआई -------- | | | | मॉडल

फेकाडे, वास्तव में भंडारों के साथ-साथ निबर्ननेट वस्तुओं को encapsulating होगा।

क्या यह ध्वनि उचित है? क्या पसंदीदा वास्तुकला पर कोई दिशानिर्देश है?

Thanx

+0

क्षमा करें, लेकिन मुझे स्वरूपण सही नहीं मिल रहा है। – Albert

उत्तर

6

यह आमतौर पर है कि क्या मैं अपने ऐप्स में कार्य करें:

  • फू।कोर

    • डोमेन वस्तुओं, व्यापार तर्क, आदि
    • कुछ लोगों को भी भंडार इंटरफेस यहाँ रखा इस तरह के वेब सेवाओं, ESBs, या डेटा का उपयोग के रूप में किसी भी बुनियादी सुविधाओं से संबंधित विधानसभाओं, करने के लिए कोई संदर्भ है, लेकिन यह एक है डिजाइन पसंद यह आप अपने डोमेन सेवाओं यहाँ है, जो
    • भंडार कार्यान्वयन खजाने के साथ बातचीत, अभी भी NHibernate
    • से
  • Foo.Persistence

    • संदर्भ NHibernate करने के लिए decoupled की अनुमति देता है
    • काम की यूनिट HttpModule एएसपी.नेट के लिए (वेब ​​एप में एनएचबीर्नेट के सत्र जीवन चक्र को नियंत्रित करने में मदद करता है)
  • Foo.Web

    • दोनों Foo.Core और Foo.Persistence
    • HttpModule संदर्भ के संदर्भ NHibernate सत्र

Foo.Web कभी नहीं सीधे NHibernate के साथ सूचना का आदान प्रदान को नियंत्रित करने के ... यह हमेशा भंडारों के माध्यम से होता है। एक आईओसी कंटेनर के साथ आप केवल आईरिपोजिटरी का अनुरोध कर सकते हैं और इस पर ध्यान नहीं दे सकते कि कार्यान्वयन क्या है।

+0

मेरे मन में जो कुछ भी था, उतना ही कम लगता है। धन्यवाद – Albert

+0

मुझे यह दृष्टिकोण पसंद है। मुझे यह देखने में बहुत दिलचस्पी है कि आप (या कोई और) कार्य इकाई के साथ एनएचबीर्नेट सत्र प्रबंधन कैसे करेगा। यदि आप इस पर थोड़ा सा विस्तार कर सकते हैं तो मैं आभारी रहूंगा। –

0

Catharsis आप के लिए क्या देख रहे हो सकता है।

0

हाँ। यह सही के बारे में लगता है। मैंने एनएचबीर्नेट का कभी भी उपयोग नहीं किया लेकिन आपका यूआई आपके यूआई के बीच साझा किया गया और एक मुखौटा अच्छा लगता है। बेशक एक ही लक्ष्य तक पहुंचने के कई अलग-अलग तरीके हैं लेकिन आपका अच्छा दिखता है। :)

2

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

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

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

एनएचबीर्नेट के लिए उपयोग किए जाने वाले वास्तविक कार्यान्वयन वास्तव में एमवीसी के उपयोग के लिए प्रासंगिक नहीं है, इस तथ्य को छोड़कर कि आपका यूआई इस बात से अवगत नहीं होगा कि डेटा कैसे संग्रहीत या एक्सेस किया जाता है।