मैं एक छोटे से अनुप्रयोग पर काम कर रहा हूँ जो डोमेन-संचालित डिज़ाइन के सिद्धांतों को समझने की कोशिश कर रहा है। यदि सफल रहा, तो यह एक बड़ी परियोजना के लिए एक पायलट हो सकता है। मैं "इंप्लीमेंटिंग डोमेन-ड्रिवेन डिज़ाइन" पुस्तक (वॉन वर्नोन द्वारा) का पालन करने की कोशिश कर रहा हूं और एक समान, सरल चर्चा मंच को लागू करने की कोशिश कर रहा हूं। मैंने गिडब पर IDDD के नमूने भी जांचे हैं। मुझे अपने मामले की पहचान और पहुँच को अपनाने में कुछ कठिनाइयाँ हैं। मुझे कुछ पृष्ठभूमि की जानकारी दें:
- मैं (उम्मीद है) उपयोगकर्ताओं और अनुमतियों के तर्क को अलग करने के पीछे के तर्क को समझता हूं: यह एक सहायक डोमेन है, और यह एक अलग बाध्य संदर्भ है।
- कोर डोमेन में, कोई उपयोगकर्ता नहीं हैं, बस लेखक, मॉडरेटर, आदि। ये एक सेवा का उपयोग करके पहचान और पहुंच के संदर्भ तक पहुंचते हैं और फिर प्राप्त उपयोगकर्ता वस्तुओं को और मॉडरेटर को अनुवाद करते हैं।
डोमेन संचालन को एक संबंधित भूमिका के साथ एक पैरामीटर के रूप में कहा जाता है: जैसे:
ModeratePost( ..., moderator);
डोमेन ऑब्जेक्ट की विधि यह जांचती है कि क्या दिए गए मॉडरेटर का उदाहरण शून्य नहीं है (यदि उपयोगकर्ता पहचान और एक्सेस के संदर्भ में मॉडरेटर की भूमिका नहीं करता है, तो मॉडरेटर का उदाहरण शून्य होगा)।
एक मामले में, यह एक पोस्ट को बदलने से पहले एक अतिरिक्त जांच करता है:
if (forum.IsModeratedby(moderator))
मेरे प्रश्न हैं:
बाद के मामले में सुरक्षा चिंताओं को फिर से कोर डोमेन में मिश्रित नहीं किया गया है? पहले किताबें बताती हैं कि "कौन किसी विषय को पोस्ट कर सकता है, या किन शर्तों के तहत अनुमति दी जा सकती है। एक फोरम को बस यह जानना होगा कि एक लेखक अभी ऐसा कर रहा है"।
पुस्तक में भूमिका आधारित कार्यान्वयन काफी सीधा है: जब एक मॉडरेटर एक कोर डोमेन होता है, तो वर्तमान उपयोगकर्ता को एक मॉडरेटर आवृत्ति में या एक लेखक को एक लेखक में बदलने की कोशिश करता है जब उसे इसकी आवश्यकता होती है। यदि उपयोगकर्ता की आवश्यक भूमिका नहीं है, तो सेवा उपयुक्त उदाहरण या अशक्त के साथ प्रतिक्रिया करेगी। हालाँकि, मैं यह नहीं देख सकता कि मैं इसे और अधिक जटिल सुरक्षा मॉडल में कैसे अनुकूलित कर सकता हूं; हमारे वर्तमान प्रोजेक्ट मैं समूहों, ACLs, आदि के साथ एक जटिल मॉडल है।
यहां तक कि नियमों के साथ जो बहुत अधिक जटिल नहीं हैं, जैसे: "एक पोस्ट को केवल उसके स्वामी या संपादक द्वारा संपादित किया जाना चाहिए", यह दृष्टिकोण टूटने लगता है, या कम से कम मुझे इसे लागू करने का सही तरीका नहीं दिखता है।
OwnerOrEditor इंस्टेंशन के लिए आइडेंटिटी और एक्सेस के संदर्भ को पूछना सही नहीं लगता है, और मैं कोर डोमेन में अधिक से अधिक सुरक्षा से संबंधित कक्षाओं को समाप्त कर दूंगा। इसके अलावा, मुझे न केवल userId पास करने की आवश्यकता होगी, लेकिन सुरक्षा के संदर्भ में सुरक्षा संसाधन (पोस्ट, फ़ोरम, आदि की आईडी) की पहचानकर्ता, जिसे शायद इन बातों की परवाह नहीं करनी चाहिए (क्या यह सही है? )
कोर डोमेन के लिए अनुमतियों को खींचकर और डोमेन ऑब्जेक्ट्स या सेवाओं के तरीकों में उनकी जांच करके, मैं वर्ग एक पर समाप्त करूँगा: डोमेन के साथ सुरक्षा चिंताओं का मिश्रण।
मैंने कहीं पढ़ा है (और मैं इससे सहमत हूं) कि ये अनुमति संबंधित चीजें कोर डोमेन का हिस्सा नहीं होनी चाहिए, जब तक कि सुरक्षा और अनुमतियां कोर डोमेन ही न हों। क्या ऊपर दिया गया एक साधारण नियम सुरक्षा को मुख्य डोमेन का हिस्सा बनाने को सही ठहराता है?
HasPermissionToEdit(userId, resourceId)
लेकिन मुझे इन कॉल के साथ डोमेन लॉजिक को दूषित करना सही नहीं लगता। संभवतः डोमेन लॉजिक को लागू करने से पहले मुझे एप्लिकेशन सेवा विधियों में इनकी जांच करनी चाहिए?
UserService @AccessControlList[inf3rno]
कि मैं जिस उत्तर से जुड़ा था।