मैं कमजोर डोमेन मॉडल और चिंताओं की जुदाई के बारे में सवाल के कुछ पढ़ा है। एनीमिक डोमेन ऑब्जेक्ट्स पर डोमेन लॉजिक करने/जोड़ने के लिए सबसे अच्छी तकनीक क्या हैं? मेरे काम पर, हमारे पास एक सुंदर एनीमिक मॉडल है, और हम वर्तमान में डोमेन ऑब्जेक्ट्स पर डेटाबेस/व्यवसाय तर्क करने के लिए "सहायक" कक्षाओं का उपयोग कर रहे हैं। उदाहरण के लिए:तकनीक
public class Customer
{
public string Name {get;set;}
public string Address {get;set;}
}
public class Product
{
public string Name {get;set;}
public decimal Price {get;set;}
}
public class StoreHelper
{
public void PurchaseProduct(Customer c, Product p)
{
// Lookup Customer and Product in db
// Create records for purchase
// etc.
}
}
एप्लिकेशन एक खरीद करने की जरूरत है, यह StoreHelper बनाते हैं, और डोमेन वस्तुओं पर विधि कॉल करेगा। मेरे लिए, यह ग्राहक/उत्पाद कैसे भंडार करने के लिए खुद को बचाने के लिए पता करने के लिए के लिए कोई मतलब होगा, लेकिन आप शायद सहेजें() डोमेन वस्तुओं पर तरीकों नहीं करना चाहेंगे। यह ग्राहक की तरह एक विधि के लिए भी समझ में आएगा। खरीद (उत्पाद), लेकिन यह इकाई पर डोमेन तर्क डाल रहा है।
यहाँ कुछ तकनीकों मैं का सामना करना पड़ा, यकीन है कि जो अच्छा/बुरा कर रहे हैं नहीं कर रहे हैं:
- ग्राहक और उत्पाद एक "संस्था" का वर्ग है, जो एक सामान्य फैशन में बुनियादी CRUD संचालन (प्रदान करता है से विरासत शायद एक ओआरएम का उपयोग कर)।
- पेशेवरों: प्रत्येक डेटा ऑब्जेक्ट स्वचालित रूप से CRUD संचालन मिलेगा, लेकिन फिर डेटाबेस/ORM से बंधा है
- विपक्ष: यह वस्तुओं पर व्यापार कार्य की समस्या का समाधान नहीं होता है, और यह भी सभी डोमेन वस्तुओं बांध एक आधार इकाई है कि उपयुक्त नहीं होता है
- उपयोग सहायक CRUD संचालन और व्यापार तर्क
- को संभालने के लिए यह मतलब है "शुद्ध डेटाबेस" के संचालन के लिए DAOs के लिए कक्षाएं, और अलग व्यवसाय सहायकों उनके लिए अयस्क व्यापार-विशिष्ट संचालन?
- यह इस के लिए बेहतर गैर स्थिर या स्थिर सहायक वर्गों का उपयोग करने के है?
- सकारात्मक: नहीं बहुत OO, बहुत आवेदन कोड में सहायकों उपयोग करने के लिए प्राकृतिक नहीं (सी कोड की तरह दिखता है)
- : डोमेन वस्तुओं किसी भी डेटाबेस/व्यापार तर्क (पूरी तरह से कमजोर)
- विपक्ष से जुड़ा नहीं है एक मनमाना भंडार
- को बचाने के लिए डबल डिस्पैच तकनीक जहां इकाई के तरीकों है का उपयोग सकारात्मक: संस्थाओं के लिए कुछ अतिरिक्त तर्क संलग्न (हालांकि यह decoupled है) : चिंताओं
- विपक्ष के बेहतर जुदाई
- सी # 3.0, आप विस्तार तरीकों का उपयोग कर सकता है उसे स्पर्श करने से
- यह एक वैध दृष्टिकोण है बिना एक डोमेन वस्तु को CRUD/व्यापार के तरीकों संलग्न करने के लिए है? पेशेवर/विपक्ष क्या हैं?
- अन्य तकनीकों?
इस से निपटने के लिए सबसे अच्छा तरीके क्या हैं? मैं बहुत DDD के लिए नया हूँ (मैं इवांस किताब पढ़ रहा हूँ - तो शायद कि मेरी आँखों खुलेगी)
ग्राहक को संभालने के लिए अलग-अलग कक्षाओं की तरह लगता है। किसी भी जटिल को संभालने के लिए सेवा के साथ, इसे अधिकांश कक्षाओं में क्यों नहीं फेंक दें? –
मेरा जवाब नरक की तरह पुराना है। : डी –
@ लकीलिंडी मुख्य रूप से क्योंकि डीडीडी डोमेन विशेषज्ञों और प्रोग्रामर के बीच पुल बनाने के बारे में है। डोमेन मॉडल में तकनीकी सामान नहीं होना चाहिए, अन्यथा सर्वव्यापी भाषा मौजूद नहीं होगी। तकनीकी सामान को बाहर निकालने के लिए - हमें इसे अमूर्त करना होगा। कुछ सार हमेशा कोड आधार को बढ़ाता है। –