2013-04-16 2 views
6

मैं डोमेन-संचालित डिज़ाइन और परीक्षण-संचालित विकास दोनों का उपयोग करके एक प्रोजेक्ट पर काम कर रहा हूं। इवांस द्वारा डीडीडी पुस्तक के माध्यम से पढ़ते समय, मैंने देखा कि उन्होंने डोमेन में कुल जड़ों के लिए इंटरफेस को परिभाषित नहीं किया है।डोमेन-संचालित डिजाइन में एक इंटरफेस को एक समग्र रूट लागू करना चाहिए

यदि मैं डीडीडी और टीडीडी दोनों कर रहा हूं, तो क्या मुझे कुल रूट वर्गों को आसानी से टेस्ट करने योग्य और नकली बनाने के लिए प्रत्येक समग्र रूट के लिए इंटरफेस परिभाषित करना चाहिए? यदि हां, तो क्या मुझे समग्र रूट के भीतर मौजूद प्रत्येक इकाई के लिए इंटरफ़ेस भी परिभाषित करना चाहिए?

Google और StackOverflow पर मेरी खोजों से, मुझे ऐसे उत्तरों मिल गए हैं जो मैं ढूंढ रहा हूं, लेकिन मैं विशेष रूप से डीडीडी और टीडीडी दोनों करते समय सलाह की तलाश कर रहा हूं क्योंकि मेरी धारणा है कि टेस्टेबिलिटी, जब टीडीडी कर रहे हैं, मैंने अब तक देखे गए उत्तरों में अनदेखा किया जा सकता है।

+0

यह एक व्यापक सवाल है। आप शायद एक उदाहरण देना चाहते हैं कि आपकी इमारत को और अधिक विशिष्ट उत्तर प्राप्त करने के लिए क्या करना है। जैसा कि यह खड़ा है कि आपको 'यह निर्भर करता है' बहुत कुछ जवाब दे सकता है –

+1

हब्सन, मैं प्रश्न की व्यापकता के लिए क्षमा चाहता हूं। स्पष्टीकरण के लिए, मैं विशेष रूप से यह निर्धारित करने की कोशिश कर रहा हूं कि क्या इवांस ने जानबूझकर उदाहरणों को सरल रखने के लिए पुस्तक में अपने उदाहरणों में कुल जड़ों के लिए इंटरफेस को परिभाषित नहीं किया है (यानी टीडीडी की तरह पहलुओं को नजरअंदाज करना, या पुस्तक के विषय के बाहर) उन्होंने उन्हें बाहर रखा क्योंकि वे टीडीडी करते समय भी कोई अतिरिक्त मूल्य प्रदान नहीं करते हैं। प्रश्न में उदाहरण कार्गो एप्लिकेशन इवांस डोमेन-संचालित डिजाइन पुस्तक में उनके उदाहरण के रूप में इस्तेमाल किया जाएगा। मुझे आशा है कि इससे सवाल के दायरे को कम करने में मदद मिलेगी। प्रतिक्रिया के लिए धन्यवाद। –

+0

कोई माफी मांगी नहीं है, और यह ठोस में बना है। बस मैंने जो सीखा है उसे पारित करें। लोग इस तरह के प्रश्न को "यहां पर जहां मैं हूं" कोड/आर्किटेक्चर आरेखों के साथ जोड़ा गया है। –

उत्तर

4

नहीं, कुल मिलाकर सीधे परीक्षण करें। कुल मिलाकर खुद को निर्भरता इंजेक्शन नहीं दी जानी चाहिए और यदि किसी विशिष्ट व्यवहार को निर्भरता की आवश्यकता होती है, जिसे आमतौर पर एक इंटरफ़ेस के रूप में व्यक्त किया जाना चाहिए। एक समग्र पर एक इंटरफ़ेस एक अनावश्यक अमूर्त है - व्यवहार का केवल एक ही कार्यान्वयन है - यही बात है। इसके अलावा, BDD and DDD पर एक नज़र डालें - व्यवहार-प्रेरित विकास को टीडीडी के विकास के रूप में देखा जा सकता है और डीडीडी के साथ अच्छी तरह से संरेखित किया जा सकता है।

+0

क्या हम अनावश्यक अमूर्तता के लिए आपके मतलब के बारे में बात कर सकते हैं? http://chat.stackoverflow.com/rooms/28305/domain-driven-design –

+0

मैं इसे एक शॉट दूंगा, एक ही समय में मिलना मुश्किल हो सकता है .. – eulerfx

+1

मैंने काफी कुछ शोध किया है मैंने दो दिन पहले इस प्रश्न को पोस्ट किया था और मैंने जो सीखा है वह है कि सभी डोमेन इकाइयों (कुल जड़ों समेत) के लिए इंटरफेस बनाने का सवाल एक बड़ा और भारी बहस वाला विषय है (यहां तक ​​कि टीडीडी या डीडीडी पर विचार किए बिना)। यह देखते हुए, मुझे लगता है कि स्पष्ट कट जवाब नहीं होने वाला है। तो मुझे यह मानना ​​है कि इवान्स ने जानबूझकर कुल जड़ों के लिए इंटरफेस को छोड़ दिया है क्योंकि आपने जो कारण बताए हैं। इस प्रकार, मैं इस दृष्टिकोण के साथ आगे बढ़ने जा रहा हूं और देखता हूं कि यह कैसा चल रहा है। आपकी प्रतिक्रिया के लिए धन्यवाद! –

3

मुझे डोमेन का उपयोग कर ग्राहकों के परीक्षण को कम करने के लिए interfaces for all entities and domain services को परिभाषित करने के लिए उपयोग किया जाता है। इसके अलावा जब आवश्यक हो तो इस तरह के दृष्टिकोण एओपी को आसान बनाता है।

मूल्य वस्तुओं के लिए, यह निर्भर करता है। उदाहरण के लिए मैं इवेंट तर्क, identifiers, exceptions (स्पष्ट रूप से) और कुछ अन्य प्रकार के "अनुबंध" के लिए इंटरफेस का उपयोग नहीं करता हूं। हालांकि, मुझे क्लाइंट कोड परीक्षण के अलगाव को कम करने के लिए इंटरफ़ेस पेश करना पड़ा। इस प्रकार अंगूठे का मेरा नियम है: ग्राहक को वांछित स्थिति में मूल्य वस्तु प्राप्त करने के लिए कितने कदम की आवश्यकता है? यदि यह एक से अधिक है (या दो, अच्छी समझ मेरे दोस्त है :- डी), मैं बहुत शुरुआत से एक इंटरफेस पेश करता हूं।

नोट मैं समेकन के बारे में बात नहीं कर रहा हूं, क्योंकि मेरे सभी योग भी संस्थाएं हैं।

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