2014-09-25 4 views
6

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

  • आप आप हाइपरलिंक का उपयोग करने के लिए HTTP, यूआरआई, माइम, आदि जैसे मानकों का उपयोग करना होगा ...
  • आपको आरडीएफ vocabs का उपयोग अर्थशास्त्र के साथ डेटा और हाइपरलिंक एनोटेट करने के लिए करना है।
  • आप इन सभी को सेवा के कार्यान्वयन विवरण से ग्राहक को कम करने के लिए करते हैं।

सीक्यूआरएस (या इसके बिना) के साथ डीडीडी उतना ही समान है जितना मैं समझता हूं।

  • सीक्यूआरएस द्वारा आप डोमेन मॉडल से बातचीत करने के लिए एक इंटरफ़ेस परिभाषित करते हैं। इस इंटरफेस में एक प्रश्न वर्गों के आदेश होते हैं।
  • डीडीडी द्वारा आप डोमेन घटनाओं को दृढ़ता से डोमेन मॉडल को डीक्यूपल करने के लिए परिभाषित करते हैं।
  • डीडीडी द्वारा आपके पास एक सर्वव्यापी भाषा प्रति बाध्य संदर्भ है जो अर्थशास्त्र को व्यक्त करता है।
  • आप इन सभी को बाहरी दुनिया से डोमेन मॉडल को पूरी तरह से कम करने के लिए करते हैं।

क्या कमांड और प्रश्नों और डोमेन घटनाओं द्वारा परिभाषित डोमेन इंटरफेस में आरईएसटी वर्दी इंटरफेस को मैप करना संभव है? (इसलिए आरईएसटी सेवा कोड स्वचालित रूप से जेनरेट किया जाएगा।)

क्या संबंधित डेटा सेमेन्टिक्स को सर्वव्यापी भाषाओं में मैप करना संभव है? (इसलिए आपको बहुत ही समान शर्तों को परिभाषित करने की आवश्यकता नहीं होगी, केवल मौजूदा vocabs को ढूंढें और पुन: उपयोग करें।)

कृपया अपने उत्तर में एक बहुत ही सरल मैपिंग उदाहरण जोड़ें, क्यों हाँ या क्यों नहीं!

+0

यह मुझे नग्न वस्तुओं (http://www.nakedobjects.org/) की याद दिलाता है। मैं देखता हूं कि कुछ भी आरामदायक वस्तुओं (http://restfulobjects.org/) कहलाता है: http://www.infoq.com/articles/Intro_Restful_Objects –

+0

असल में कमांड, डोमेन इवेंट आदि के गुण ... छुपा नहीं होना चाहिए । वे डीटीओ हैं जो डोमेन मॉडल के इंटरफ़ेस का प्रतिनिधित्व करते हैं। इसलिए नग्न वस्तुएं मुझे लगता है कि कुछ अलग है। रीस्टफुल ऑब्जेक्ट्स को गलत मैपिंग मिली: "बाकी ऑब्जेक्ट्स विनिर्देश में प्रत्येक डोमेन ऑब्जेक्ट एक संसाधन है"। लेकिन मैं और मदद नहीं करता, मैं जवाब लिखना नहीं चाहता हूं। – inf3rno

उत्तर

9

मुझे नहीं लगता कि यह संभव है है। एक शब्द है जो मुझे विश्वास है कि इस समस्या का वर्णन करता है, इसे ontology alignment कहा जाता है।

इस मामले में कम से कम 3 ontologies है है:

  • सर्वव्यापी भाषा (UL) डोमेन मॉडल की
  • आवेदन विशिष्ट vocab बाकी सेवा
  • की (ASO) खुला जुड़ा हुआ कम से कम डेटा Vocabs (LODO) जो आवेदन विशिष्ट vocab

का उपयोग करता है तो हमारे पास 2 संरेखण:

  • यूएल: आसो संरेखण
  • आसो: LODO संरेखण

हमारी समस्या यूएल से संबंधित है: आसो संरेखण, तो चलो इन ontologies के बारे में बात करते हैं।

यूएल ऑब्जेक्ट उन्मुख है, क्योंकि हम डीडीडी और डोमेन मॉडल के बारे में बात कर रहे हैं। इसलिए अधिकांश डोमेन ऑब्जेक्ट्स entities, value objects वास्तविक वस्तुएं हैं और डेटा संरचनाएं नहीं हैं। इसका गैर-ऑब्जेक्ट उन्मुख हिस्सा डोमेन मॉडल के इंटरफ़ेस पर command+domainEvent, query+result और error जैसे डीटीओ हैं।

इसके विपरीत एएसओ कड़ाई से प्रक्रियात्मक है, हम उन पर मानक विधियों (प्रक्रियाओं) के एक सेट का उपयोग कर संसाधनों (डेटा संरचनाओं) में हेरफेर करते हैं।

तो मेरी पहलू से हम के बारे में 2 बहुत अलग बातें बात कर रहे हैं और हम निम्न विकल्प हैं:

  • आसो अधिक वस्तु उन्मुख बनाने -> आरपीसी
  • उन्मुख यूएल कम वस्तु बना -> कमजोर डोमेन मॉडल
दृश्य हम निम्नलिखित बातें कर सकते हैं मेरी बात से

तो:

  • हम सीआरयूडी द्वारा संचालन के लिए संसाधनों और कमांडों को स्वचालित रूप से मैप कर सकते हैं, उदाहरण के लिए HydraBundle सक्रिय रिकॉर्ड के साथ करता है (हम डीडीडी के साथ और सीक्यूआरएस के बिना ही कर सकते हैं)
  • हम मैन्युअल रूप से संचालन के लिए आदेशों को मानचित्र बना सकते हैं जटिल डोमेन मॉडल

    • आपरेशन POST transaction {...} एक SendMoneyCommand{...}
    • आपरेशन GET orders/123/total एक OrderTotalQuery{...}
  • परिणाम कर सकते हैं परिणाम कर सकते हैं

    हम एक जटिल डोमेन मॉडल के आधार पर संसाधनों के लिए संस्थाओं को मैप नहीं कर सकते, क्योंकि हम एक नई सेवा या एक नई इकाई विधि का वर्णन करने के नए संसाधनों को परिभाषित करने के लिए है, उदाहरण के

    • ऑपरेशन के लिए POST transaction {...}account.sendMoney(anotherAccount, ...)
    • आपरेशन परिणाम कर सकते हैं GET orders/123/total कभी एक इकाई

मुझे लगता है कि यह सत्तामीमांसा संरेखण शर्त के इस प्रकार करने के लिए संभव नहीं है बिना छुए पढ़ने डेटाबेस पर एक SQL क्वेरी में परिणाम कर सकते वीन डीडीडी + सीक्यूआरएस और आरईएसटी, लेकिन मैं इस विषय का विशेषज्ञ नहीं हूं। मुझे लगता है कि हम कर सकते हैं हम संसाधन वर्गों, गुणों और संचालन के साथ एक अनुप्रयोग विशिष्ट vocab बना रहा है और कमांड/क्वेरी गुणों के लिए आदेश/क्वेरी और गुणों के लिए संचालन मैप।

1

आपने यहां कुछ दिलचस्प प्रश्न पूछे हैं।

शुरू करने के लिए के साथ मैं काफी

तक DDD आप हठ विवरण से डोमेन मॉडल दसगुणा डोमेन गतिविधि को परिभाषित से सहमत नहीं हैं।

मुझे लगता है कि आप भ्रमित DDD साथ Event Sourcing ES हो सकता है, ES DDD के साथ इस्तेमाल किया जा सकता है, लेकिन इसके बहुत ज्यादा वैकल्पिक वास्तव में आप इसे सोचा था की एक बहुत कुछ अपने हठ तंत्र के रूप में यह चुनने से पहले देना चाहिए।

अब आपके प्रश्न का बड़ा हिस्सा, क्या आरईएसटी और डीडीडी के साथ मिलते हैं या नहीं?

मेरा ले लो, हां वे साथ मिलते हैं, हालांकि आम तौर पर आप अपने डोमेन मॉडल को एक आरईएसटी इंटरफ़ेस के माध्यम से बेनकाब नहीं करना चाहते हैं, तो आप इसके ऊपर एक अमूर्त बनाना चाहते हैं और फिर उसे बेनकाब करना चाहते हैं।

आप थोड़ी अधिक जानकारी के लिए इस उत्तर here पर जा सकते हैं।

हालांकि मैं Implementing Domain-Driven Design पुस्तक की पर्याप्त सिफारिश नहीं कर सकता, अध्याय 14 आवेदन आपकी चिंता के साथ उचित डिग्री के लिए सौदा करता है।

मैं किताब की तुलना में अधिक अच्छी तरह से यह नहीं समझाया जा सकता था और इसलिए तुम वहाँ चर्चा करते हुए :)

+0

"मुझे लगता है कि आप डीडीडी के साथ इवेंट सोर्सिंग ईएस को भ्रमित कर सकते हैं" - नहीं, डीडीडी द्वारा आपको डेटा स्टोरेज से अपने डोमेन मॉडल को डीक्यूपल करना होगा, या हम सक्रिय रिकॉर्ड के बारे में बात कर रहे हैं, न कि डोमेन मॉडल। डोमेन ईवेंट का उपयोग करना ऐसा करने का सबसे अच्छा तरीका है। "अब आपके प्रश्न के बड़े हिस्से में, क्या आरईएसटी और डीडीडी के साथ मिलते हैं यदि हां कैसे?" वे साथ मिलते हैं। सवाल यह था कि डोमेन मॉडल के आधार पर स्वचालित रूप से आरईएसटी भाग उत्पन्न करना संभव है या नहीं ... – inf3rno

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