5

रेल के डोमेन मॉडल decoupling मैं विशेष रूप से जादू सेम विरोधी पैटर्न के आसपास "एसक्यूएल Antipatterns: डेटाबेस प्रोग्रामिंग से बचने" की किताब पढ़ रहा है। इसमें एक डोमेन मॉडल का उपयोग करके एक्ट्रैग डिकूप्लिंग एक्ट्रीक्रॉर्ड्स दिखाता है और इसमें PHP में उदाहरण है, लेकिन रेल नहीं है, यह इसे डोमेन मॉडल और विचार/नियंत्रकों और डोमेन मॉडलों और एक्टिव्रेकॉर्ड्स (I) के बीच एचएएस-ए संरचना के बीच एक समेकन के रूप में संदर्भित करता है। मान लें कि यह यूएमएल बोलता है)।Activerecord

रेल में यह मॉडल विधियों का उपयोग करके पतली नियंत्रक वसा मॉडल बनाने के लिए आम जगह प्रतीत होता है, ये विधियां अन्य संबंधित मॉडल में हेरफेर कर सकती हैं ताकि किसी भी नियंत्रक में केवल एक मॉडल का उपयोग किया जा सके। हालांकि, मुझे आश्चर्य है कि क्या कोई अभ्यास है जिसमें रेल में कुल decoupling शामिल है?

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

उत्तर

4

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

पाठ्यक्रम का नकारात्मक हिस्सा दोहरी श्रेणी के पदानुक्रम का संभावित उदय है, जहां आपके पास एक दृश्य मॉडल हो सकता है जो आपकी कई डोमेन इकाइयों से मेल खाता है। अभ्यास में हालांकि, मुझे लगता है कि दोहरी कक्षा पदानुक्रम बनाए रखना डोमेन इकाई को बदलने की विधियों के बारे में चिंता करने से कहीं अधिक आसान है। The Fallacy of ReUse पर एक नज़र डालें।

एक एसओए सिस्टम में, ऑब्जेक्ट्स 'रैप' को देखने वाली ऑब्जेक्ट्स डोमेन इकाइयां नहीं हो सकती हैं बल्कि डीटीओ उन डोमेन इकाइयों का प्रतिनिधित्व करती हैं। यह दृश्य मॉडल की संरचना का उल्लंघन नहीं करता है, क्योंकि वे स्वयं डीटीओ हैं और व्यवहार संबंधी पहलू नहीं हैं, केवल डेटा। this आलेख पर एक नज़र डालें जो आवेदन सीमाओं पर डेटा की प्रकृति पर चर्चा करता है।

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

+0

धन्यवाद इसने मुझे इस स्टैक ओवरफ्लो थ्रेड की दिशा में इंगित किया है http://stackoverflow.com/questions/2521522/are-view-models-used-in-rails और फिर बदले में जे फ़ील्ड जिन्होंने प्रस्तुति पैटन पर कुछ काम किया RailsConfEU 07 http://blog.jayfields.com/2007/09/railsconf-europe-07-presenter-links.html –

+0

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

5

आपको यह रेल आधारित एप्लिकेशन उपयोगी हो सकता है: https://github.com/qertoip/guru_watch - इसका लक्ष्य यह दिखाने के लिए है कि रॉबर्ट सी मार्टिन द्वारा अनुशंसित तरीके से ActiveRecord से कैसे रद्द किया जाए। इसे उपयोग केस संचालित वास्तुकला या इकाई-नियंत्रण-सीमा पैटर्न के रूप में जाना जाता है।