tl; dr - यदि आवश्यक हो तो नियम तोड़ें। DDD सभी समस्याओं को हल नहीं कर सकता; वास्तव में यह जो वस्तु विचार देता है वह अच्छी सलाह और एक अच्छी शुरुआत है, लेकिन कुछ व्यावसायिक समस्याओं के लिए वास्तव में बुरा विकल्प है। चीजों को कैसे करना है, इसके लिए एक संकेत पर विचार करें।
माता-पिता (खाते) के साथ सभी बच्चों (लेन-देन) को लोड करने के मुद्दे के लिए - ऐसा लगता है कि आपने n + 1 समस्या (Google से कुछ) में भाग लिया है, जिसे कई ORM ने हल किया है।
आप इसे आलसी बच्चों (लेन-देन) को लोड करके हल कर सकते हैं - केवल जब जरूरत हो।
लेकिन लगता है कि आप पहले से ही जानते हैं कि इस समस्या का समाधान करने के लिए आप एक TransactionRepository का उपयोग कर सकते हैं।
उस डेटा को 'छिपाने' के लिए, ताकि केवल खाता ही उसका उपयोग कर सके, आपको इसे स्टोर करने की भी आवश्यकता नहीं होगी, जहां कोई और नहीं, उसे सार्वजनिक संबंध तालिका की तरह इसे हटाना नहीं होगा। आप इसे किसी दस्तावेज़ DB में खाते के 'दस्तावेज़' के साथ संग्रहीत कर सकते हैं। किसी भी तरह से अगर किसी ने पर्याप्त प्रयास किया तो भी वे डेटा देख सकते हैं। और इसके साथ 'काम'। और जब आप नहीं देख रहे हैं, तो वे करेंगे!
तो आप अनुमतियाँ सेट कर सकते हैं, लेकिन फिर, आपको एक अलग प्रक्रिया के रूप में 'खाता' चलाना होगा।
यहां आपको वास्तव में पता चलता है कि डीडीडी और ऑब्जेक्ट मॉडल का शुद्ध उपयोग कभी-कभी आपको एक कोने में वापस कर देगा। सच्चाई यह है कि निश्चित रूप से, आपको डीडीडी के डिजाइन सिद्धांतों से लाभ के लिए 'रचना' / कुल रूट का उपयोग करने की आवश्यकता नहीं है। यह केवल एक चीज है जिसका आप उपयोग कर सकते हैं जब आपके पास ऐसी स्थिति होती है जो इसकी बाधाओं में फिट होती है।
कोई कह सकता है 'जल्दी अनुकूलन मत करो'। इस मामले में, हालांकि, आप जवाब जानते हैं - एक विधि को काटने के लिए पर्याप्त लेनदेन होगा जो उन सभी को खाते के साथ हमेशा के लिए रखेगा।
असली जवाब SOA को खड़ा करना शुरू करना है। मेरे कार्यस्थल पर हमने उदी दहन 'वितरित कंप्यूटिंग' वीडियो देखे और nServiceBus (केवल हमारी पसंद) खरीदा। खातों के लिए एक सेवा बनाएं - अपनी प्रक्रिया, संदेश कतारों के साथ, एक संबंध डेटाबेस तक पहुंच केवल यह देख सकता है, और ... वायोला, आप प्रोग्राम में एसक्यूएल बयानों को हार्डकोड कर सकते हैं और यहां तक कि कोबोल लेनदेन स्क्रिप्ट के एक जोड़े में फेंक सकते हैं (मजाक कर रहे हैं बेशक) लेकिन गंभीरता से ओओ / जावा स्नोब के सपने की तुलना में चिंताओं का अधिक अलगाव हो सकता है।
मैं इसे अच्छी तरह से मॉडलिंग करने की सलाह दूंगा; आप केवल एक मिनी-बाउंडेड काउंटेक्स के रूप में सेवा का इलाज करके समस्याओं के बिना यहां मूल रूट का लाभ उठा सकते हैं।
यह निश्चित रूप से एक खामी है। आप RPC (webservice, SOAP, या REST) को केवल सेवाओं में और उनके बीच में या उनके बीच में नहीं कर सकते हैं या आपको अस्थायी युग्मन के कारण 'knot' नामक SOA एंटीपैटर मिलता है। आपको संचार पैटर्न, उर्फ 'पब-सब' का उपयोग करना होगा, जो इसे इवेंट हैंडलर और इवेंट राइजर्स की तरह है, लेकिन (1) प्रक्रियाओं के बीच (जो आप अलग-अलग मशीनों पर डाल सकते हैं यदि वे एक पर ओवरलोड हो रहे हैं)।
असली मुद्दा यह है कि आप एक ऐसी सेवा नहीं चाहते हैं जो किसी अन्य सेवा से 'ब्लॉक' या प्रतीक्षा करने के लिए डेटा प्राप्त करने की आवश्यकता है - आपको आग लगाना होगा और संदेश को भूलना होगा और अपने प्रोग्राम में एक हैंडलर को कहीं और ले जाने के लिए इसे पूरा करना होगा। इसका मतलब है कि आपको अपना तर्क अलग तरह से करना होगा। nServicebus इसमें से कुछ के साथ मदद करने के लिए 'गाथा' पैटर्न को स्वचालित करता है, लेकिन अंत में, आपको एक अलग कोडन शैली विकसित करनी होगी। आप अभी भी यह सब कर सकते हैं, बस इसे अलग तरीके से करना होगा!
Arnon Rotem-Gal-Oz की पुस्तक "SOA पैटर्न" इस बारे में कई सवालों के जवाब देती है। आवश्यकता पड़ने पर बाहरी सेवाओं के डेटा को समय-समय पर अपने स्वयं के सक्रिय करने के लिए 'सक्रिय सेवा पैटर्न' के उपयोग को शामिल करना (कई आरपीसी की आवश्यकता होती थी, या लिंक अविश्वसनीय / प्रकाशित / सदस्यता पारिस्थितिकी तंत्र में नहीं है)।
बस पूर्वावलोकन करने के लिए, UI को सेवाओं में RPC करना होगा। रिपोर्ट एक रिपोर्टिंग डेटाबेस से उत्पन्न होती हैं जो सेवाओं के डेटाबेस द्वारा खिलाया जाता है। कुछ लोगों का कहना है कि रिपोर्ट की जरूरत नहीं है और समस्या को दूसरे तरीके से हल किया जाना चाहिए। उस बात पर संदेह करो।
हालांकि अंत में, सभी चीजों को एक ही सेवा में ठीक से वर्गीकृत नहीं किया जा सकता है। रवीओली कोड पर दुनिया नहीं चलती है! इसलिए आपको नियम तोड़ने पड़ेंगे। यहां तक कि अगर आपके पास कभी नहीं होगा, तो परियोजना के नए देवता इसे तब करेंगे जब आप इसे छोड़ देंगे। लेकिन चिंता न करें, यदि आप ऐसा करते हैं, तो आप जो follows५% नियम का पालन करते हैं, वह एक ऐसा कार्यक्रम बना देगा जो कहीं अधिक बनाए रखने योग्य है।
वाह, यह लंबा था।