हम पहली बार हमारी परियोजना में डोमेन-संचालित डिजाइन को अपनाने की कोशिश कर रहे हैं। मेरे पास समस्याएं संस्थाओं के बीच संघों के साथ है। आप उन्हें सही कैसे करते हैं?डीडीडी में संघों को लागू करने का सही तरीका?
कहें, मुझे Employee
और Contract
मिल गया है, जो कि एक साधारण से-कई संगठन हैं। मैं इसे कैसे मॉडल करूं?
विकल्प 1: कुल।
समस्या: समस्या यह है कि, यदि मैं इसे सही ढंग से समझता हूं, तो एक समग्र वस्तु उत्पन्न होने पर कुल में सभी इकाइयों को लोड किया जाना चाहिए। जब वे जरूरी होते हैं तो मैं आलसी लोड इकाइयों को नहीं कर सकता क्योंकि इसे किसी इकाई से एक भंडार का संदर्भ देने की आवश्यकता होगी, जो स्पष्ट रूप से खराब है। लेकिन डेटाबेस से सभी कर्मचारी के अनुबंधों को हर समय लाने का एक बड़ा प्रदर्शन मुद्दा होगा।
विकल्प 2: भंडार (जैसे ContractRepository.GetContractsForEmployee()
) का उपयोग कर और Contract
वर्ग के लिए EmployeeId
संपत्ति जोड़कर एक कर्मचारी के ठेके ला रहा है।
समस्या: यह किसी भी व्यावसायिक तर्क को संस्थाओं में रखना मुश्किल बनाता है। मैं एक विधि कहना चाहूंगा, Employee.Dismiss()
, लेकिन उसे कर्मचारी के अनुबंध को अपडेट करने की भी आवश्यकता होगी। इसका मतलब है कि मुझे इस तर्क को एक सेवा में रखना होगा। समस्या यह है कि, मैं केवल Employee
पर अधिक तर्क परिचालन के बारे में नहीं सोच सकता और इस प्रकार मॉडल कुछ हद तक एनीमिक बन जाएगा, जिसमें अधिकांश तर्क सेवाओं के साथ।
डीडीडी में इन मुद्दों से आप कैसे निपटते हैं?
एक बार जब आप 'सरल एक से कई संगठन' सोच रहे हैं तो आप डीडीडी नहीं कर रहे हैं, आप डेटाबेस स्कीमा डिज़ाइन कर रहे हैं। संस्थाओं के बीच संबंध व्यवहार होना चाहिए। एक कर्मचारी खुद को खारिज नहीं कर सकता है, इसे खारिज कर दिया जाना चाहिए (किसी अन्य इकाई द्वारा जिसके पास ऐसा करने का अधिकार है)। विकल्प 2 सही है। आपको एक संस्था के लिए बहुत सारे व्यवहार के साथ आने की ज़रूरत नहीं है। यदि वास्तविक व्यवसाय में कोई डोमेन ऑब्जेक्ट बहुत आसान है, तो इसे इस तरह से मॉडल करें। यह मायने रखता है कि डोमेन अवधारणा को परिभाषित करता है (अर्थशास्त्र) और ऑब्जेक्ट के कितने तरीकों से नहीं है। – MikeSW
माइकएसडब्ल्यू सही है। डीडीडी का एक बहुत ही महत्वपूर्ण पहलू सर्वव्यापी भाषा है। जिस तरह से आप डोमेन के बारे में बात करते हैं, वह डोमेन विशेषज्ञ डोमेन के बारे में बोलने का तरीका होना चाहिए अन्यथा कोड अजीब और अनजान हो जाता है। यह मामूली लगता है लेकिन यदि आपको यह अधिकार मिलता है तो संस्थाएं व्यवहार का सुझाव देना शुरू कर देती हैं। जैसे Employee.Resign(); Contract.Terminate(); – Asher