क्या, DDD के संदर्भ में, एक बाध्य संदर्भ है?


40

वॉन वर्नोन द्वारा "इंप्लीमेंटिंग डोमेन ड्रिवेन डिज़ाइन" पुस्तक के माध्यम से काम करते समय, मैं इस बात पर अच्छी पकड़ हासिल करने में असमर्थ रहा कि वास्तव में एक बंधे हुए संदर्भ में क्या है।

पुस्तक एक बंधे हुए संदर्भ को "एक वैचारिक सीमा जहां एक डोमेन मॉडल लागू है, परिभाषित करता है। यह सर्वव्यापी भाषा प्रदान करता है जो टीम द्वारा बोली जाती है और इसके सावधानीपूर्वक डिज़ाइन किए गए सॉफ़्टवेयर मॉडल में व्यक्त की जाती है" ("गाइड टू दिस बुक" प्रीफ़ेसिंग सेक्शन)। यह परिभाषा इस बात पर जोर देती है कि एक बद्ध संदर्भ एक उपडोमेन का मॉडल और भाषा है, जहां वह उपडोमेन कोर डोमेन हो सकता है (जो ऐसा लगता है कि इसे "कोर उपडोमेन" कहा जाना चाहिए, लेकिन यह एक और चर्चा ...)। यह अभी भी कुछ अस्पष्टता छोड़ देता है कि एक बाध्य संदर्भ क्या प्रदान करता है। क्या यह एक या एक से अधिक उप-समूहों का समूह है? यदि केवल एक उपडोमेन एक बाध्य संदर्भ से मेल खाता है, तो बाध्य संदर्भ वास्तव में हमें क्या बता रहा है?

हालाँकि, इसी पुस्तक का अध्याय 3, बंधे संदर्भों के बीच एकीकरण तकनीकों को संदर्भित करता है। यह, हालांकि, यह प्रतीत होता है कि बंधे हुए संदर्भ वास्तव में सॉफ्टवेयर सिस्टम या कुछ किस्म के कलाकृतियां हैं।

मार्टिन फाउलर संक्षेप में एक बंधे संदर्भ ( http://martinfowler.com/bliki/BoundedContext.html ) के विचार पर चर्चा करते हैं , लेकिन वास्तव में इस मुद्दे को स्पष्ट नहीं करते हैं।

दिन के अंत में, एक बाध्य संदर्भ क्या है ? क्या यह उप-समूहों का समूह है? एक उपडोमेन के लिए मॉडल और भाषा? एक उपडोमेन का कार्यान्वयन? इन उत्तरों के बिना, यह समझना मुश्किल है कि वास्तविक जीवन की समस्या के स्थान को सीमित संदर्भों में कैसे विघटित किया जाए।



2
यह पोस्ट वास्तव में परिभाषा को स्पष्ट नहीं करती है, कम से कम मेरे लिए। यह बंधे हुए संदर्भों के विचार पर चर्चा करता है क्योंकि वे संगठनात्मक रूप से लागू हो सकते हैं, लेकिन यह वास्तव में सॉफ्टवेयर विकास के लिए कभी भी पुलों का निर्माण नहीं करता है।
माइकल

1
ठीक है। खैर, हालाँकि मैं डीडीडी विशेषज्ञ नहीं हूँ, लेकिन मुझे यह विवरण Microsoft के उपयोगी (परिचय पैराग्राफ में) से मिला: msdn.microsoft.com/en-us/library/jj591572.aspx । यह कहता है: ...
रॉबर्ट हार्वे

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

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

जवाबों:


38

बाउंडेड कॉन्टेक्स और सबडोमेन विभिन्न स्तरों पर मौजूद हैं।

एक उपडोमेन समस्या स्थान का एक हिस्सा है, यह प्रणाली का एक प्राकृतिक विभाजन है, जो अक्सर संगठन की संरचना को दर्शाता है। इसलिए रसद और संचालन चालान और बिलिंग से अलग हो सकते हैं । एरिक दिए गए परिदृश्य में अपने व्यापार की प्रासंगिकता के अनुसार कोर , सहायक और सामान्य उप- क्षेत्रों को अलग करता है।

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

एक बाउंडेड संदर्भ के लिए आपको एक मॉडल और उसके चारों ओर एक स्पष्ट सीमा की आवश्यकता होती है। सटीक रूप से कई डेटा-संचालित एप्लिकेशन में गायब है जो डेटा साझा करने के लिए डेटाबेस का उपयोग करते हैं।

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


1
तो, एक आदर्श दुनिया में, उप-डोमेन और बंधे संदर्भों के बीच 1-से-1 संबंध होगा? (समझ, स्पष्ट रूप से, कि आदर्श क्या है और सत्य क्या है)।
माइकल

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

लेकिन मुख्य बात यह समझने की है कि दो समस्या वाले परिवार हैं: 1) मौजूदा संदर्भ को पढ़ना (जहां आप केवल मौजूदा मॉडल और सहयोगों को स्वीकार और श्रेणीबद्ध कर सकते हैं ), 2) मौजूदा बाधाओं को देखते हुए सही सॉफ़्टवेयर डिज़ाइन करना, इस प्रकार संदर्भ सीमाएं लागू करना। छोटे, उद्देश्य उन्मुख मॉडल के बीच। दूसरे परिदृश्य में आप जानबूझकर उपडोमेन सीमाओं को ओवरलैप नहीं करेंगे। ... सामान्य तौर पर, एक गैर-आदर्श संगठन में सही सॉफ्टवेयर की तलाश में मुश्किल सामान हो सकता है। लेकिन उन विसंगतियों को हल करना संभव हो सकता है।
ZioBrando

8

डोमेन ड्रिवेन डिज़ाइन तकनीक का उपयोग हमें उस दुनिया के मॉडल बनाने में मदद करने के लिए किया जाता है जिसमें हम रहते हैं। ये मॉडल एक परियोजना में शामिल लोगों के दिमाग में विचारों के रूप में मौजूद हैं।

क्योंकि टेलीपैथी अभी भी अपनी प्रारंभिक अवस्था में है, इन विचारों को शब्दों और वाक्यांशों का उपयोग करने वाले लोगों के बीच संवाद किया जाता है।

शब्द और वाक्यांश सबसे अच्छे समय पर अस्पष्ट हो सकते हैं। अस्पष्टता को कम करने में हमारी मदद करने के लिए, हम उनके अर्थ को स्पष्ट करने के लिए 'संदर्भ' का उपयोग करते हैं।

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

Newbies परियोजना के लिए आते हैं और अपनी भाषा का उपयोग और उपभोग शुरू करते हैं। शायद वे उपयोगकर्ता हैं, शायद वे डेवलपर्स हैं। यदि उन्हें कोई संदर्भ प्रदान नहीं किया जाता है, तो वे अपने स्वयं के जीवन के अनुभव से अपने स्वयं के संदर्भ (और इसलिए, अर्थ) के साथ आएंगे।

यह नया लागू किया गया संदर्भ यह बताता है कि नए डेवलपर्स कैसे कोड को रिफलेक्टर या विकसित करते हैं। यदि उन्होंने गलत संदर्भ लागू किया है, तो वे कोड को फिर से बनाएंगे और विकसित करेंगे, शायद कभी-कभी-थोड़ा, गलत दिशा। गलत दिशाएं, हालांकि मामूली, लाइन के नीचे बहुत बड़ी समस्याएं पैदा कर सकती हैं।

जैसा कि मैं देख रहा हूं, एक 'बाउंडेड संदर्भ' केवल एक 'स्पष्ट संदर्भ' है जिसे प्रोजेक्ट के लिए दिया गया है ताकि वे हमारे स्वयं के मनमाने ढंग से संदर्भ को लागू न कर सकें, हमारे सुंदर, सम्मानित मॉडल को।

यह टीम द्वारा, कुछ स्पष्ट पावती है कि this phraseमें, this part of the projectइसका मतलब है वास्तव में this thing(और नहीं, जैसा कि आप अच्छी तरह से सोच सकते हैं, that thing)।

जिस तरह अपने बगीचे और अपने पड़ोसी के बगीचे के बीच की सीमाओं को चिह्नित करना एक अच्छा विचार है। आप स्पष्ट रूप से सीमा को निर्दिष्ट करते हैं ताकि जब आप अपने पूरी तरह से मैनीक्योर लॉन पर फूल बिस्तर खोदना शुरू न करें तो आप नाराज न हों।

बस इतना ही। यह एक बहुत ही सरल विचार है जो इतना महत्वपूर्ण है कि इसके बारे में बहुत कुछ लिखा गया है।

तो हाँ। एक बंधे हुए प्रसंग का शाब्दिक अर्थ है एक सीमा, एक 'बाड़', जो एक परियोजना में दूसरे उपडोमेन के संदर्भ से एक उपडोमेन के संदर्भ के बीच अंतर करती है।

एक उपडोमेन का मॉडल और भाषा अर्थ में अस्पष्टता से बचने के लिए अन्य मॉडल और भाषाओं से अलग-थलग है।

लेकिन हां। दुनिया इतनी सरल नहीं है।

आपको और टीम को परिभाषित संदर्भ का पालन करने में कठोर होना होगा। सॉफ्टवेयर निर्माण के दौरान कोनों को काटने के संदर्भ में आलसी होना और फिर से कल्पना करना वास्तव में आसान है।

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


1
तो यह एक उपडोमेन के चारों ओर एक बाड़ है, मूल रूप से।
रॉबर्ट हार्वे

1
हाँ। जहां तक ​​मैं इसे देख सकता हूं। यह एक बाड़ है।
JW01

0

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

अलग-अलग स्थितियों में मैं तीन अलग-अलग दृष्टिकोणों या बाउंडेड कॉन्सेप्ट अवधारणा के रूपकों का उपयोग करता हूं।

रन-टाइम परिप्रेक्ष्य से, यह तार्किक सीमाओं का प्रतिनिधित्व करता है, एक सेवा के अनुबंध द्वारा परिभाषित किया जाता है जहां मॉडल लागू किया जाता है। अनुबंध को इस सेवा के एपीआई या घटनाओं के एक सेट के रूप में दर्शाया जा सकता है जो इसे प्रकाशित करता है और खपत करता है। इसलिए इस दृष्टिकोण से बद्ध संदर्भ का भौतिक सीमाओं से कोई लेना-देना नहीं है।

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

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

मैं वास्तव में बंधी हुई अवधारणा के इस उदाहरण को पसंद करता हूं ।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.