यहां कोई अज्ञानता क्षमा करें, मैं डीडीडी के लिए बिल्कुल नया हूं इसलिए नम्र हो।एक कॉन्फ़िगर करने योग्य नियम संचालित सिस्टम में डीडीडी
मैं एक बड़ी कॉन्फ़िगरेशन संचालित डेटा प्रबंधन प्रणाली पर काम कर रहा हूं। प्रणाली बाहरी वाक्यविन्यास में कॉन्फ़िगरेशन के टुकड़े (जैसे व्यापार नियम, प्रक्रियाओं और सत्यापन) निर्दिष्ट करके बनाई गई है। आइए बस यह कहें कि सिंटैक्स ग्रोवी आधारित डीएसएल और ड्रोल के समूह का समूह था।
मुझे डीडीडी ऑफ़र की सादगी के विचार पसंद हैं, विशेष रूप से डोमेन की मूल अवधारणाओं से बुनियादी ढांचे की चिंताओं को अलग करना।
हालांकि, मैं सिस्टम की कॉन्फ़िगर करने योग्य प्रकृति के कारण डीडीडी की कुछ अवधारणाओं को लागू करने के लिए संघर्ष कर रहा हूं। दोनों व्यवहार (प्रक्रियाओं), सत्यापन, और व्यापार नियमों को सिस्टम के बाहर परिभाषित किया जाता है। इसलिए डोमेन में संस्थाओं का आंतरिक रूप से व्यवहार नहीं होता है। इसके बजाय वे "वैलिडेटर" चीज़ या "नियम इंजन" या "वर्कफ़्लो इंजन" के लिए नाजुक हैं।
मैं एक उदाहरण के साथ स्पष्टीकरण दूंगा। मान लें कि मेरा सिस्टम एक कंपनी के लिए कर्मचारियों का प्रबंधन करता है। बहुत ज्यादा विचार किए बिना, आप कल्पना करेंगे कि मेरे पास मेरे डोमेन में एक कर्मचारी इकाई और कंपनी इकाई है।
डीडीडी के बाद, मैं एक ऐसे परिदृश्य को मॉडल करने की कोशिश कर रहा हूं जहां एक कर्मचारी को पदोन्नत किया जाता है। आप प्रचारक (कर्मचारी.प्रोमोट) नामक कर्मचारी पर एक नई विधि आ सकते हैं। हमारे पास एक व्यापार नियम हो सकता है, यह दर्शाता है कि एक कर्मचारी को उसी वर्ष दो बार प्रचारित नहीं किया जा सकता है (हां यह सब तैयार है)।
public void promote(EmployeeLevel newLevel) {
if (hasBeenPromotedThisYear(this) {
throw new InvalidPromotionException
ठीक है, आवेदन में मैं इस व्यवसाय शासन के साथ काम कर रहा हूँ एक नियम इंजन के लिए externalized किया जाएगा: इसलिए मैं कुछ ऐसा हो सकता था। डीडीडी के बाद, मैं कुछ ऐसा कर सकता था:
if(promotionRules.isEligibleForPromotion(this)
मेरे नियमों को बाहरी बनाने के लिए। हालांकि, प्रणाली इससे कहीं अधिक सामान्य है। "पदोन्नति" ऑपरेशन को बाहरी कॉन्फ़िगरेशन के माध्यम से स्वयं "प्रक्रिया" के रूप में परिभाषित किया जाता है। तो, संकलन समय पर, मुझे यह भी पता नहीं होगा कि मेरे पास इस कर्मचारी के लिए "प्रचार" ऑपरेशन उपलब्ध है या नहीं। तो मेरा कर्मचारी ऑब्जेक्ट कॉन्फ़िगरेशन में सभी कार्यक्षमताओं को प्रस्तुत करते हुए कोड परिप्रेक्ष्य से काफी नंगे बन जाता है। यह कुछ इस तरह दिख सकता है:
public class Employee {
public void execute(Process process)
या वैकल्पिक रूप से
public class EmployeeProcess {
public void process(Employee employee)
मेरा प्रश्न है: DDD भी इस आवेदन में मतलब होता है? क्या मुझे इसके बजाय एक गैर डीडीडी भावना में प्रक्रियाओं, सत्यापन, व्यापार नियम (नियम इंजन) के सहयोग का मॉडल करना चाहिए?
मुझे प्याज आर्किटेक्चर पसंद है, और यूआई -> ऐप सर्विसेज -> कोर -> इन्फ्रास्ट्रक्चर का उपयोग चिंताओं का एक अच्छा अलगाव रखने के लिए कर सकते हैं। लेकिन मूल "डोमेन अवधारणाओं" के विरोध में कोर ऊपर उल्लिखित सहयोगी हो सकता है।
मेरा हिस्सा मानता है कि, इस मामले में, "डोमेन अवधारणाएं" वैधकर्ता, प्रोसेसर, व्यवसाय नियम हैं क्योंकि वे सर्वव्यापी भाषा बनाते हैं जब हम अपने सिस्टम पर चर्चा करते हैं। इस मामले में, मेरे पास ऐसी वास्तविकताओं (अधिकांश भाग के लिए), और प्रोसेसर, वैलिडेटर्स, नियम इंजन के संदर्भ में डोमेन अवधारणाएं होंगी जो सिस्टम में व्यवहार का एहसास करती हैं।
थोड़ा और जानकारी जोड़ना। ऊपर दिए गए मेरे प्रश्न को देखते हुए, मैं ऐसे समाधान की ओर काम कर रहा था जो इस तरह दिखेगा:
org.example।एप्लिकेशन
org.example.domain - कर्मचारी - कंपनी - EmployeeLevel
org.example.domain.shared - प्रक्रिया - BusinessRule - सत्यापनकर्ता
org.example.infrastructure
उम्मीद है कि, यह छोटा स्निपेट थोड़ा स्पष्टता जोड़ता है।
तो, प्रक्रिया, व्यवसाय नियम, और सत्यापनकर्ता अवधारणाएं डोमेन के अंदर झूठ बोलेंगी, लेकिन सिस्टम की चीजों के संदर्भ में डोमेन मॉडल का समर्थन करेंगे।
प्रतिक्रिया के लिए धन्यवाद। मॉडल में निश्चित रूप से व्यापार अवधारणाएं होंगी (उदाहरण के बाद, एक कर्मचारी इकाई और उचित संबंधों वाली कंपनी इकाई होगी)। यह केवल उन संस्थाओं के लिए सबसे अधिक हिस्सा होगा। इसलिए, यदि मैं आपको सही तरीके से पालन कर रहा हूं, तो प्रक्रियाओं, नियमों, मान्यताओं को डोमेन में साझा/सामान्य चीजें साझा की जाएंगी (विशिष्टता पैटर्न के बाद)? यह वह रास्ता था जिसे मैं नीचे जा रहा था। – noplay
उत्तर के अपडेट को देखें –
अद्यतन के लिए धन्यवाद। मुझे पूरा यकीन है कि व्यापार अवधारणा डोमेन मॉडल में केंद्रीय होगी। कॉन्फ़िगरेशन में बहुत से काम का ख्याल रखा जाता है, लेकिन वहां बहुत सारे मूल व्यवसाय अवधारणाएं हैं जो डोमन में सक्रिय होंगी। – noplay