2012-03-13 6 views
20

एक रेल अनुप्रयोग में मॉडलों को डिजाइन करने और कोड करने के लिए विभिन्न दृष्टिकोणों के बारे में सह-कार्यकर्ता के साथ हालिया बहस ने मुझे DCI in the context of Rails पर लाया।डीसीआई क्या है और यह रेल के साथ कैसे फिट हो सकता है?

हालांकि, this example application पर जाने के बाद भी, मैं बस उस पूरे अवधारणा के आसपास अपना सिर लपेट नहीं सकता।

वर्तमान में, मुझे रेल ऐप लिखते समय "by the book" अधिक या कम जाना पड़ता है।

तो आपको कुछ बातों का मैं पूछने के लिए करना चाहते हैं -

  • डीसीआई क्या है और जब सादे पुराने MVC (और रेल में वेनिला ActiveRecord) से अधिक MVC पास लागू इसके फायदे क्या हैं?
  • और इसे रेल में कैसे कार्यान्वित किया जा सकता है (या दूसरे शब्दों में, सभी मॉड्यूल के साथ क्या है)?

संपादित

मैं आगे भी आतंक विरोधी के संदर्भ में मेरे सवाल का विस्तार करना चाहते हैं - मॉडल और रेल में नियंत्रकों के बीच अमूर्त का एक और स्तर की सिफारिश की है? विभिन्न पैमाने पर अनुप्रयोगों में यह कितना व्यापक है?

+0

अपने प्रश्न के लिए खड़ा है अत्यंत व्यापक है और वहाँ बहुत मुश्किल जवाब देने के लिए के लिए। वहां कुछ ऐसे स्थान हैं जहां ऐसा लगता है कि आप डीसीआई संदर्भ में डीसीआई संदर्भ में कुछ सवालों के जवाब देने के लिए और भी कठिन नहीं बना रहे हैं। यदि आप लक्ष्य हैं तो मैं डीसीआई सामान के साथ आपकी मदद कर सकता हूं लेकिन आपको –

+0

के दायरे को कम करने की आवश्यकता होगी, मैं ज्यादातर समझना चाहता हूं कि * डीसीआई क्या है। एक रेल कार्यान्वयन के लिए, एक साधारण उदाहरण या यहां तक ​​कि एक दो-पंक्ति स्पष्टीकरण बहुत अच्छा होगा। – GeReV

+0

महान सवाल। मुझे यह पढ़ने तक नहीं पता था कि प्रतिमान के लिए एक नाम था कि मैं हाल ही में हंसी कर रहा हूं।मैं उस कोड को देख रहा हूं जिसे मैं बनाए रखता हूं (जिसे मैंने नहीं लिखा था) और सोच रहा था "डेटा और व्यवहार के बीच क्लासवाइंड अलगाव क्या है।" मुझे लगता है कि यह ठीक है जो डीसीआई करने की कोशिश कर रहा है। –

उत्तर

18

डीसीआई एक प्रतिमान है और इसलिए एप्लिकेशन को डिज़ाइन करने के तरीके से कहीं अधिक है। मॉडलिंग के साथ-साथ संरचना कोड के बारे में सोचने का यह एक तरीका है। डीसीआई के महत्वपूर्ण हिस्सों में से एक यह है कि सिस्टम क्या है (डोमेन मॉडल) और सिस्टम (कार्यक्षमता) को अलग करता है। डीसीआई एमवीसी के समान समस्या को हल करने के लिए एक अलग दृष्टिकोण नहीं है, इसलिए आपका पहला प्रश्न वास्तव में उत्तर नहीं दिया जा सकता है। आप एमवीसी और डीसीआई का एक साथ उपयोग कर सकते हैं जो कि कोई संयोग नहीं है क्योंकि ट्रिगवे रेंसकग एमवीसी और डीसीआई दोनों का पिता है। उन्होंने हाल ही में Google समूह 'ऑब्जेक्ट-कंपोज़िशन' पर similar question का उत्तर दिया।

उदाहरण जो आपने लिंक किया है, कुछ मूलभूत विचारों का उल्लंघन करता है जैसे संदर्भों के लिए निजी भूमिका निभाना और मुझे वास्तव में एक संदर्भ नहीं मिल सका, लेकिन यह कोड ब्राउज़ करने में केवल थोड़े समय खर्च करने के कारण हो सकता है ।

मुझे अपने स्वयं को आरओआर नहीं पता है इसलिए मैं आपको आरओआर उदाहरण नहीं दे सकता लेकिन यदि आप fullOO पर जाते हैं तो आपको रूबी और मार्विन दोनों डीसीआई के लिए डिज़ाइन की गई पहली भाषा सहित विभिन्न भाषाओं में लिखे गए उदाहरण मिलेंगे।

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

EDIT रूबी और डीसीआई पर book है।लेखक ऑब्जेक्ट-रचना और अंतर्दृष्टि पर बहुत सक्रिय है

+0

मुझे कहना होगा कि पूर्णू पर रूबी उदाहरण थोड़ा अजीब लगता है, उदाहरण के लिए थ्रेड चर का उपयोग। क्या कोई डीसीआई उदाहरण हैं जो मुहावरेदार रूबी के करीब हैं, या यह संभव नहीं है? –

+0

@MatijsvanZuijlen विशेष रूप से उदाहरणों में से कौन सा है। उनमें से कुछ शुद्ध रबी में लिखे गए मणि का उपयोग करके लिखे गए हैं। मणि कुछ मुद्दों को हल करता है क्योंकि रूबी डीसीआई के स्कोपिंग नियमों का समर्थन नहीं करता है, हालांकि डीबगिंग अनुभव में कुछ हद तक उस मणि का उपयोग करने की कमी है। शुद्ध रूबी उदाहरण तब डीसीआई के स्कोपिंग नियमों का उल्लंघन करते हैं, इसलिए दोनों आरयूबी में डीसीआई के करीबी अनुमान हैं, जिनमें से कोई भी वास्तविक डीसीआई है (क्योंकि रूबी में यह संभव नहीं है हालांकि आप बहुत करीब हो सकते हैं) –

+0

मुझे केवल एक उदाहरण मिला: http: //fulloo.info/Examples/RubyExamples/Dijkstra/DijkstraListing.html –

5

रुबी/रेल में डीसीआई का उपयोग करने पर एक पुस्तक (वर्तमान में प्रगति पर है): Clean Ruby। मैं आपको अधिसूचना सूची में खुद को रखने का सुझाव देता हूं - मैंने इस पुस्तक के कुछ हिस्सों को पढ़ा है और यह वास्तव में अच्छा लगता है।

डीसीआई रेल दुनिया में स्वीकृति प्राप्त कर रहा है - पिछले 3 महीनों में इसके बारे में कई रोचक ब्लॉग पोस्ट हैं।

8

DCI के दिल में संज्ञानात्मक उपकरण यह डेवलपर प्रदान करता है। मुझे यकीन नहीं है कि क्या आपने सभी महान James Coplien/Trygve Reenskaug व्याख्यान देखे हैं, लेकिन मैं अवधारणाओं के लिए किसी नए व्यक्ति के लिए इसकी गलती को दूर करने की कोशिश करूंगा। यह सिस्टम के इंटरैक्टिंग डोमेन ऑब्जेक्ट्स (डेटा एंटिटीज, या सिस्टम क्या है), और व्यवहार ऑब्जेक्ट्स (सिस्टम क्या करता है) में प्रथम श्रेणी के नागरिकों के रूप में सिस्टम व्यवहार को आगे बढ़ाने के बारे में है जो कार्यक्षमता के साथ इंजेक्शन करके ऑब्जेक्ट्स के बीच सहयोग में मध्यस्थता करता है एक उपयोग मामले के संदर्भ में बस समय में।

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

आरओआर में एक उदाहरण के रूप में, यदि आपके पास एक उपयोग मामले में एक नियंत्रक कार्रवाई शामिल है जिसमें एक घटना संभाव्यता मैट्रिक्स है जहां अधिकांश प्रविष्टियों को अनुरोधों के केवल एक छोटे प्रतिशत में ट्रिगर किया जा सकता है, तो फुले हुए व्यवहार के नेटवर्क को तुरंत चालू करना डेटा के हर संभव उपयोग मामले के लिए हर घटना को निष्पादित करने के लिए ज्ञान के साथ भारी वस्तुओं अनावश्यक है। इसके अलावा, मेरे टेक्स्ट एडिटर में 18 फाइलों के माध्यम से खोदने के लिए यह समझने के लिए कि यह बातचीत कैसे काम करती है, संदर्भ वस्तु द्वारा प्रदान किए गए इंटरफ़ेस में पैटर्न के लिए स्पष्ट रूप से सारित सभी तर्कों को एक निश्चित प्लस भी है।

रेलवे में नियंत्रकों और मॉडलों के बीच अमूर्तता की 'दूसरी' परत के बारे में आपके प्रश्न के बारे में, मुझे यकीन नहीं है कि आप किस दूसरे का जिक्र करते हैं। भले ही, हाँ। हर तरह से। कोई बात नहीं। Design patterns और अंकल बॉब्स 'SOLID सिद्धांत ओओ डिजाइन में काफी आम तौर पर सर्वोत्तम प्रथाओं को स्वीकार करते हैं। ये दोनों नीति और कार्यान्वयन के बीच कमजोर युग्मित अवशेषों को दृढ़ता से प्रोत्साहित करते हैं। वे दोनों रोमन साम्राज्य के विनाशकारी विध्वंस के विनाशकारी मस्तिष्क डंप से बचने में मदद करते हैं, क्योंकि वे सभी को समझते हैं कि एक आम ढांचा प्रदान करते हैं। मेरे लिए डीसीआई, एक ही प्रकार का संज्ञानात्मक रूपरेखा प्रदान करता है, लेकिन सिस्टम को प्रभावी ढंग से समझने और प्रभावी ढंग से निपटने के लिए, और यह किसी वस्तु ऑब्जेक्ट उन्मुख डिजाइनर के लिए पवित्र अंगूर है।

11

लोग हैं, जो सोच रहे हैं क्या डीसीआई के लिए खड़ा के लिए ..

डीसीआई Data Context Interaction

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