किसी बंधे हुए संदर्भ की सीमाओं को स्पष्ट रूप से कैसे परिभाषित किया जाए


9

डीडीडी को पढ़ने और शोध करने के एक महीने बाद, मैंने अपनी परियोजना शुरू करने का फैसला किया और इन बंधे हुए संदर्भों के साथ डीडीडी बनाया।

  • ग्राहकों
  • उत्पाद
  • आदेश
  • बिलिंग

प्रत्येक बंधे हुए संदर्भ में एक प्रस्तुति परत, डोमेन परत, लगातार परत के रूप में बाकी एपीआई है।

अब तक अच्छा है, कोड सुचारू रूप से चल रहा है, लेकिन एक अखंड दुनिया से आ रहा है, मैं अभी भी निम्नलिखित का पता लगाने की कोशिश कर रहा हूं:

  • जब मैं एक नया ग्राहक बनाना चाहता हूं, तो नया चालान जारी कर सकता हूं, नए आदेश बना सकता हूं, उदाहरण के लिए मैं देशों की पहुंच सूची बनाना चाहता हूं। क्या मैं:

क) प्रत्येक ई.पू. में देशों की एक सूची बनाएँ

बी) एक देश बीसी -> एपीआई बनाएं और इसका उपयोग उपलब्ध देशों की सूची प्राप्त करने के लिए करें

ग) प्रत्येक ई.पू. में एक 3 पार्टी एपीआई का उपयोग करें और एंटीकोर्पोरशन परत के माध्यम से डेटा खींचें

  • जब एंटी-कोरप्शन परत या एडेप्टर लेयर का उपयोग करके 3rd पार्टी एपीआई के साथ एकीकरण किया जाता है, तो मेरे डोमेन मॉडल में कौन से डेटा को शामिल किया जाना है? उदाहरण के लिए अगर मैं क्लाइंट बीसी के साथ एक zendesk एपीआई को एकीकृत करना चाहता हूं। क्या मुझे अपने डोमेन में बस एक टिकिड की आवश्यकता है, या मुझे Zendesk से सभी डेटा निकालने होंगे जो मैं क्लाइंट बीसी में एक्सेस और उपयोग करना चाहता हूं?

अगर मेरा एमवीसी ऐप वास्तव में एपीआई (मेरे बंधे हुए संदर्भों की प्रस्तुति परतों) से डेटा प्राप्त कर रहा है, तो मुझे प्रत्येक बीसी की सीमाओं को स्पष्ट रूप से परिभाषित करना बहुत मुश्किल लगता है। क्या इसका मतलब यह है कि ठीक से डिज़ाइन किया गया बीसी अतिरिक्त एपीआई का उपभोग करने की आवश्यकता के बिना एक एकल एमवीसी नियंत्रक की सेवा करेगा?


2
ध्यान रखें कि डीडीडी में डेटा डुप्लिकेट एक प्राथमिक चिंता नहीं है ...
जॉन

जवाबों:


7

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

मैं भी आपके मॉडल को थोड़ा देखना चाहता था। आपके द्वारा सूचीबद्ध किए गए टुकड़े एक "बंधे हुए संदर्भ" में बहुत अच्छी तरह से "संस्थाएं" हो सकते हैं, जो कंपनी की संरचना पर निर्भर करता है। ईसा पूर्व अक्सर विभिन्न क्षेत्रों / विभागों / टीमों के आसपास परिभाषित किया जाता है, क्योंकि यह अक्सर "सर्वव्यापी भाषा" के बीच की प्राकृतिक सीमा है। उदाहरण के लिए, सेल्स / प्रोडक्ट्स / ऑर्डर्स के बजाय मुझे उम्मीद होगी कि BCs सेल्स / मैन्युफैक्चरिंग / वेयरहाउसिंग की तर्ज पर होंगे।

उन बीसी के अंदर, आप संज्ञाओं पर ध्यान केंद्रित नहीं करते हैं। आप उपयोग के मामलों पर ध्यान केंद्रित करते हैं, और संज्ञा के मॉडल बनाते हैं जो उपयोग के मामलों को पूरा कर सकते हैं। "एग्रीगेट रूट" के तरीके उपयोग के मामलों को निष्पादित करते हैं और संबंधित मॉडल में उचित बदलाव करते हैं।

... सभी मॉडल गलत हैं, लेकिन कुछ उपयोगी हैं।

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

डीडीडी (उदाहरण के लिए रिपॉजिटरी, विशिष्ट लेयरिंग इत्यादि) द्वारा सामने लाए गए विशिष्ट पैटर्न हैं, जो अंत के लिए साधन हैं। लेकिन ये पैटर्न हर मामले के लिए सबसे अच्छे पैटर्न होने की गारंटी नहीं है, यहां तक ​​कि डीडीडी के भीतर भी। जैसे डीडीडी हर प्रोजेक्ट के लिए "जवाब" नहीं है। आपको बस वही करना है जो आपका विश्लेषण बताता है कि करने के लिए सबसे व्यावहारिक बात है।


3

आपके सवालों से, मुझे लगता है कि आप गलत संदर्भ को गलत समझते हैं। आप नीली किताब के अध्याय 14 को फिर से पढ़ना चाहते हैं ।

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

उदाहरण के लिए, क्लाइंट डोमेन में, "देश" निवास या नागरिकता से संबंधित हो सकता है। बिलिंग में, यह मुद्रा विनिमय दरों से संबंधित हो सकता है। उन कुछ डोमेन में, आपको टैरिफ और इस तरह की चिंता करने की आवश्यकता हो सकती है।

एक दूसरा प्रश्न जो आपको उठाने की आवश्यकता है, वह है कि आपका कौन सा मॉडल "साझा" डेटा के लिए रिकॉर्ड की पुस्तक है। "देश" के मामले में, सही उत्तर शायद यह है कि उनमें से कोई भी नहीं है! भूराजनीतिक टोपोलॉजी आपके मॉडल द्वारा नियंत्रित नहीं होती है।

जब कोई देश किसी विदेशी शक्ति के कब्जे में है, तो आपके डोमेन मॉडल में क्या होना चाहिए?

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


0

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


मैं वास्तव में आपके साथ सहमत नहीं हूँ। उदाहरण के लिए यदि आपके पास 5M चालान बनाने वाले 1M ग्राहक हैं, तो आप बिलिंग को क्लाइंट प्रशासन से अलग BC में विभाजित करना चाहेंगे। आप तदनुसार अपने डोमेन के खंडों को स्केल करने में सक्षम होना चाहते हैं। इसके अलावा ग्राहकों और बिलिंग को कसकर युग्मित नहीं किया जाना चाहिए, क्योंकि ऐसा करने का कोई वास्तविक कारण नहीं है। इस तथ्य के बावजूद कि केसी सेल्स / मैन्युफैक्चरिंग / वेयरहाउसिंग को बीसी के रूप में प्रस्तावित करता है, शायद उन बीसी में से प्रत्येक के पास ऐसे जटिल डोमेन मॉडल होंगे, जिन्हें आपको बीसी को फिर से परिभाषित करने की आवश्यकता है।
दारियो ग्रेनिच

5 मी चालान बनाने वाले 1 मी ग्राहक शायद ही विशिष्ट हैं। लघु से मध्य एसएमई में आम तौर पर एकीकृत ईआरपी सिस्टम होता है। मध्यम से बड़े एसएमई और उद्यम एकीकृत या स्वतंत्र (आमतौर पर सूट आधारित) अनुप्रयोगों के लिए। यदि आपकी परिस्थितियाँ 4 जटिल डोमेन मॉडल के आधार पर एक समाधान के विकास का समर्थन करती हैं और आप इसे संभाल सकते हैं, तो आपके लिए।
आर्येह

0

इस विषय पर मेरा विचार व्यापार-क्षमता मानचित्रण या मूल्य-श्रृंखला विश्लेषण जैसी अन्य तकनीकों का उपयोग करके बाध्य संदर्भ को परिभाषित करना है । यह निम्न चरणों में आता है:

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

तो प्रारंभिक ध्यान इस बात पर है कि आपका व्यवसाय कैसे संचालित होता है।

व्यावहारिक सलाह के जोड़े:

  1. यदि आपके किसी संदर्भ / सेवा / आदि को किसी अन्य संदर्भ के डेटा की आवश्यकता है, तो संभवतः आपकी सीमाएं गलत हैं।
  2. संदर्भ संचार का अत्यधिक वांछनीय तरीका घटना-आधारित है। यह स्केलेबिलिटी और विश्वसनीयता की कुंजी है। यदि आपको समकालिक संचार की आवश्यकता होती है, तो संभवत: नहीं कि आप सीमाएं गलत हैं, फिर से। इसके अलावा, तुल्यकालिक संचार आपके सिस्टम को मार देगा।
  3. आपका डोमेन आपके विचार से अधिक अंततः सुसंगत है। जैसे हर किसी का है। सब कुछ 100% सुसंगत बनाने की कोशिश मत करो। उसमें कोई व्यावहारिक अर्थ नहीं है।
  4. संदर्भों को ऑर्केस्ट्रेटेड होने की आवश्यकता नहीं है। वे स्वयंभू हैं। इंसानों की तरह।

इस दृष्टिकोण के साथ आप अत्यधिक स्वायत्त, बनाए रखने योग्य और विश्वसनीय सेवाओं के साथ समाप्त होते हैं। आप संदर्भ सीमाओं को परिभाषित करने का एक उदाहरण देखना चाहते हैं।

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