मैं चीजों को बहुत ही सरल रखने की कोशिश जब भी मैं, तो आम तौर पर कुछ इस तरह मेरे लिए काम करता कर सकते हैं:
Myapp.Domain - सभी डोमेन विशिष्ट वर्गों इस नाम स्थान
Myapp.Data का हिस्सा - पतली परत है कि डोमेन से डेटाबेस को सारणीबद्ध करता है।
Myapp.Application - सभी "समर्थन कोड", प्रवेश, साझा उपयोगिता कोड, सेवा उपभोक्ताओं आदि
Myapp.Web - वेब UI
तो कक्षाएं उदाहरण के लिए होगा:
- Myapp.Domain.Sales.Order
- Myapp.Domain.Sales.Customer
- Myapp.Domain.Pricelist
- Myapp.Data.OrderManager
- Myapp.Data.CustomerManager
- Myapp.Aplication।Utils
- Myapp.Application.CacheTools
आदि
विचार मेरे मन में रखने के लिए के रूप में मैं साथ जाने की कोशिश है कि "डोमेन" नाम स्थान क्या आवेदन की वास्तविक तर्क कब्जा है। तो क्या है "आप" डोमेन विशेषज्ञों "(दोस्तों जो आवेदन का उपयोग करेंगे) के बारे में बात कर सकते हैं। यदि मैं किसी चीज के कारण कुछ कोडिंग कर रहा हूं, तो यह डोमेन नेमस्पेस में होना चाहिए, और जब भी मैं कुछ ऐसा कोड करता हूं जिसे उन्होंने उल्लेख नहीं किया है (जैसे लॉगिंग, त्रुटियों का पता लगाने आदि) यह डोमेन नेमस्पेस में नहीं होना चाहिए।
इस वजह से मैं भी जटिल वस्तु पदानुक्रम बनाने के बारे में सावधान हूं। आदर्श रूप से डोमेन मॉडल की कुछ सरल सरलीकृत ड्राइंग को गैर-कोडर द्वारा आसानी से समझने योग्य होना चाहिए।
इस अंत तक मैं सामान्य रूप से पैटर्न के बारे में सोचकर शुरू नहीं करता हूं। मैं केवल मानक ऑब्जेक्ट उन्मुख डिज़ाइन दिशानिर्देशों के बाद, डोमेन को जितना सरल हो सकता हूं, उतना सरल मॉडल बनाने का प्रयास करता हूं। एक वस्तु होने की क्या ज़रूरत है? वे कैसे संबंधित हैं?
मेरे मन में DDD जटिल सॉफ्टवेयर से निपटने के बारे में है, लेकिन अपने सॉफ्टवेयर बहुत आप के साथ शुरू करने के लिए आसानी से एक स्थिति में जा सकते हैं, जहां काम करने के DDD तरह से जटिलता ला देता है के बजाय उसे निकाल देता जटिल ही नहीं है अगर।
एक बार जब आप जान सकते हैं कि कुछ चीजें आयोजित किया जाना चाहिए शुरू कर देंगे, और फिर आप जो पैटर्न का उपयोग करने के, जो कक्षाओं समुच्चय आदि
मेरे उदाहरण में कर रहे हैं पता चल जाएगा अपने मॉडल में जटिलता का एक निश्चित स्तर है , Myapp.Domain.Sales.Order इस अर्थ में एक समग्र रूट होगा कि जब इसे इंस्टॉल किया जाता है तो इसमें अन्य ऑब्जेक्ट्स, जैसे कि ग्राहक ऑब्जेक्ट और ऑर्डर लाइनों का संग्रह होता है, और आप केवल उस विशेष ऑर्डर लाइनों तक पहुंच सकते हैं ऑर्डर ऑब्जेक्ट के माध्यम से ऑर्डर करें।
हालांकि, चीजों को सरल रखने के लिए, मेरे पास "मास्टर" ऑब्जेक्ट नहीं होगा जिसमें केवल बाकी सब कुछ शामिल है और इसका कोई अन्य उद्देश्य नहीं है, इसलिए ऑर्डर क्लास में मूल्यों और गुण होंगे जो एप्लिकेशन में उपयोगी हैं।
Myapp.Domain.Sales.Order.TotalCost
Myapp.Domain.Sales.Order.OrderDate
Myapp.Domain.Sales.Order.Customer:
तो मैं जैसी चीजों के संदर्भ लेंगे .PreferredInvoiceMethod
Myapp.Domain.Sales.Order.Customer.Address.Zip
आदि
बनाता है भावना ... आदेश और ग्राहक आप AggRoots सही कर रहे हैं? तो जब आप अपने ऑर्डर ऑब्जेक्ट को संदर्भित करते हैं तो आपको इसे करना होगा: Myapp.Domain.Sales.Order.Order ?? –
हां और नहीं - मैंने अपना उदाहरण थोड़ा बढ़ाया, क्योंकि टिप्पणी अनुभाग थोड़ा छोटा है। – Console
'डेटा' नामस्थान में प्रबंधक 'वर्ग मुझे एनीमिक मॉडल –