2010-02-13 8 views
5

मैंने हाल ही में स्प्रिंग रू के साथ प्रयोग करना शुरू कर दिया। यह एक बहुत ही अच्छी नौकरी करता है जो एकीकृत दृढ़ता के साथ एक डोमेन मॉडल बनाने में मदद करता है। चूंकि यह पहलुओं में दृढ़ता कार्यक्षमता को जोड़ता है, मैंने निम्नलिखित प्रश्नों के बारे में सोचना शुरू किया:क्या पहलुओं को भंडारित करते हैं?

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

तो यहां सवाल है: क्या एक पहलू एक स्पष्ट भंडार वर्ग के लिए एक वास्तविक विकल्प है? क्या आरओ एओपी दृष्टिकोण के लिए कोई डाउनसाइड्स हैं?

उत्तर

2

अपने डोमेन कक्षाओं में खोजकर्ता जोड़ना उपयोगकर्ता के दृष्टिकोण से अधिक प्राकृतिक लगता है लेकिन यह आपकी परतों को जोड़ता है। Grails स्थिर खोजक *() सेव(), ... तरीकों को जोड़कर एक ही दृष्टिकोण का उपयोग करता है।

सौंदर्य अनुप्रयोगों के अलावा वेब अनुप्रयोग सेटिंग में उपयोग नहीं होने पर व्यावहारिक दोष हो सकते हैं: आपकी डोमेन कक्षाएं अब आपके डेटाबेस से जुड़ी हैं। यदि आप इन वस्तुओं को आरएमआई या HttpInvoker के माध्यम से समृद्ध ग्राहकों को स्थानांतरित करते हैं तो ग्राहक खोज * विधियों का उपयोग नहीं कर सकता है और अक्सर क्लाइंट पर कोई सत्र/डेटाबेस कनेक्शन उपलब्ध नहीं है।

मैं आमतौर पर डोमेन कक्षाओं को एनीमिक डोमेन मॉडल (http://martinfowler.com/bliki/AnemicDomainModel.html) को रोकने के लिए सेवा परत इंटरफेस को संदर्भित करने की अनुमति देना पसंद करता हूं। इसके पास दोषों का अपना सेट है लेकिन कम से कम एक स्पष्ट सीमा प्रदान करता है। क्लाइंट पर एक सेवा इंटरफ़ेस के पीछे ठोस कार्यान्वयन सर्वर पर सभी विधि कॉल को प्रॉक्सी कर सकता है (या बस वसंत रिमोटिंग या एसएचएच के साथ एक सिनामिक प्रॉक्सी का उपयोग करें)।

तो अपने प्रश्न का उत्तर देने के लिए: यह एक विकल्प हो सकता है लेकिन आपको संभावित नकारात्मक परिणामों से अवगत होना चाहिए जो आपके डोमेन वर्ग (यानी आपका मूल व्यवसाय तर्क) सिस्टम के बीच कम पोर्टेबल बनाते हैं।

1

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

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

1

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

मुझे लगता है कि प्रेरणा जावा के साथ कुछ रेल/Grails प्राप्त करने के लिए प्रेरणा थी।

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