2012-01-10 15 views
9

वर्तमान में किसी अन्य टीम से ली गई सामग्री की कुछ कोड समीक्षा करने में और एसआरपी लागू करने और एनीमिक या समृद्ध डोमेन मॉडल (मार्टिन फाउलर द्वारा परिभाषित) के संबंध में इसके बारे में एक संदेह है। रिच डोमेन मॉडल अवधारणा बुद्धिमान ऑब्जेक्ट है जो न केवल अपनी गुणों को सेट/प्राप्त कर सकती है बल्कि कुछ और जटिल व्यावसायिक तर्क भी कर सकती है। मुझे आश्चर्य है कि यह एसआरपी में कैसे फिट बैठता है?एकल जिम्मेदारी सिद्धांत कैसे एनीमिक/समृद्ध डोमेन मॉडल से संबंधित है?

कहें कि मेरे पास मेरे मॉडल वर्ग में कुछ गुण हैं जो उन प्रोपों का पर्दाफाश कर सकते हैं और अपने प्रोपरीज पर कुछ सरल गणना प्रदान कर सकते हैं। भंडारण

storage.store(key, object); 

यह SRP का उल्लंघन नहीं करता है, तो में

class MyObject { 
    // get set 
    // parse sth 

} 

स्टोर विधि: अगली आवश्यकता इस तरह, कुछ भंडारण उद्देश्य यह है कि मेरे नियंत्रण में नहीं है में इस वस्तु डाटा स्टोर करने की संभावना है करने के लिए है MyObject में

public void store(Storage storage) { 
    storage.store('keyOne', fieldOne); 
    storage.store('keyTwo', fieldTwo); 
} 

इस ऑब्जेक्ट के पीओवी से स्टोर की विधि है, यह एक अच्छा विचार है कि वह अपने राज्य को स्टोर करने में सक्षम हो।

public StorageService { 
    private Storage; 
    // constructor here 
    .... 
    public void store(MyObject myobj); 
} 

तुम मुझे किसी भी लिंक मैं इस समस्या के बारे में पढ़ सकते हैं इंगित कर सकते हैं: अन्य तरीका यहां सेवा की तरह लागू करने और इस तरह यह करने के लिए हो सकता है? मुझे यहां SO पर एक धागा मिला है लेकिन यह मेरे प्रश्न का पूरी तरह उत्तर नहीं देता है।

डीडीडी में इसका समाधान कैसे किया जाता है? डीडीडी में मॉडल परिभाषित समृद्ध हैं और बहुत अधिक जिम्मेदारियों के रूप में देखा जा सकता है।

+3

यह एसआरपी की अत्यधिक शाब्दिक व्याख्या हो सकती है। अंकल बॉब को अनदेखा करें और "एकजुटता" के लिए जाएं। –

+0

जैसा कि मेरे उत्तर में बताया गया है, यदि संग्रहण स्थिर और अमूर्त है (कहें, कुछ मानक JSON, XML, RDB इंटरफ़ेस) तो, आईएमओ, समेकन के लिए बिल्कुल कोई समस्या नहीं है और इसे डोमेन मॉडल में डालने में कोई समस्या नहीं है। – user949300

उत्तर

6

एक अमीर डोमेन मॉडल (RDM) का अर्थ है कि तर्क मॉडल व्यवहार गवर्निंग, मॉडल के भीतर अंतर्गत आता है के रूप में getters/setters के साथ डेटा की तरह मॉडल के इलाज करने का विरोध किया। यह का अर्थ है दृढ़ता, सुरक्षा, जीयूआई में मॉडल को प्रदर्शित करने के लिए आदि, सब कुछ मॉडल के भीतर होना चाहिए।

आरडीएम और एसआरपी हाथ में जाते हैं, वे एक दूसरे के साथ संघर्ष नहीं करते हैं।

का उल्लंघन SRP/RDM:

Car { 
    // possibly violates SRP 
    storeInDatabase(); 
    // smells like anemic domain model 
    getEngineState(); 
} 

SRP/RDM के बाद:

// usings aspects to remove cross-cutting concerns from the model and follow SRP 
@DatabaseSerializable 
Car { 
    // rich domain model encapsulates engine state and exposes behavior 
    drive();    
} 
+1

यदि आपके पास ड्राइव() के अलावा कई अन्य विधियों वाली कार है, उदाहरण के लिए SwitchOn(), SwitchOff(), Turn(), ब्रेक(), प्लानरौट(), आपके पास आरडीएम है, लेकिन आपके पास नहीं है SRP। जितना अधिक समृद्ध आपकी कक्षा व्यवहार के साथ है, उतनी ही अधिक एसआरपी के खिलाफ जाती है। ये विरोधी विचार हैं। –

+0

आरडीएम का अर्थ है कि आपके मॉडल में डोमेन तर्क होना चाहिए। एसआरपी का मतलब है कि आपकी कक्षाओं को एक चीज़ के लिए ज़िम्मेदार होना चाहिए - मॉडल के मामले में इसका मतलब है 'डोमेन तर्क युक्त', और इसमें कोई कनेक्शन नहीं है, जिसमें वेब कनेक्शन खोलने वाला क्रमिक कोड या कोड शामिल नहीं है। –

+0

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

4

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

3

@Garrett हॉल

मैं कुछ हद तक अपने बयान "RDM और SRP जाना से असहमत हाथ में, वे एक दूसरे के साथ संघर्ष नहीं करते हैं।"मेरे अनुभव में, जब एसआरपी पर अत्यधिक जोर दिया जाता है, तो यह एक एनीमिक डोमेन मॉडल की ओर जाता है।" नहीं, हम किसी भी दृढ़ता का समर्थन नहीं कर सकते हैं या यहां तक ​​कि सहायता भी नहीं कर सकते हैं, नहीं, हम 21-CFR11 नहीं कर सकते हैं, नहीं, हम नहीं कर सकते यहां तक ​​कि पता है कि एक जीयूआई है ... "और अपनी कक्षा कुछ भी नहीं कर समाप्त होता है और बस है एक खून की कमी डोमेन मॉडल।

और अगर RDM overemphasized है तो SRP (उस दिशा/त्रुटि मैं में आती हैं है) पूरी तरह से रास्ते से गिरता है और आप अंततः ध्यान देते हैं कि आपकी कक्षा में 100 तरीके हैं और स्पष्ट रूप से बहुत कुछ कर रहे हैं।

आपको एक संतुलन, खुश माध्यम खोजने की आवश्यकता है जहां आरडीएम और एसआरपी दोनों हो रहे हैं। और उस संतुलन को ढूंढना कठिन और अक्सर तकनीकी समझदार की तुलना में आपकी टीम के भीतर अधिक आंत भावनाओं और राजनीति शामिल है या नियम।

"स्वयं को जानें"। यदि आप मेरे जैसे हैं, और अत्यधिक जटिल कक्षाओं की ओर रुख करते हैं, तो जागरूक रहें। और जब आप किसी और की कक्षा देखते हैं जो आपके लिए भी जटिल दिखता है, तो वह एक बड़ा लाल झंडा है। इसी प्रकार, यदि आप जानते हैं कि आप एसआरपी के बारे में बहुत कट्टर हैं, और आप एक वर्ग देखते हैं जो आपके मानकों से भी एनीमिक दिखता है, यह एक प्रमुख कोड गंध है।

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

+0

एसआरपी का कहना है कि एक वर्ग के पास बदलने का एक कारण होगा, और इसका मतलब है कि बदलने का कारण एक स्रोत है। इसलिए जब किसी ऑब्जेक्ट के लिए अलग-अलग व्यवहार मौजूद होते हैं तो उन्हें अलग-अलग वर्गों में विभाजित किया जाएगा और उन वर्गों (जो डीडीडी में सेवाएं हैं) डोमेन मॉडल से संबंधित हैं। –

संबंधित मुद्दे

 संबंधित मुद्दे