यदि मेरे पास तीन इकाइयां, प्रोजेक्ट, प्रोजेक्ट रोल और व्यक्ति हैं, जहां कोई व्यक्ति विभिन्न परियोजनाओं का सदस्य हो सकता है और विभिन्न परियोजना भूमिकाओं (जैसे "प्रोजेक्ट लीड" या "प्रोजेक्ट सदस्य") में हो - तो आप इस तरह मॉडल कैसे करेंगे एक रिश्ता?डोमेन संचालित डिजाइन के साथ आप भूमिकाओं/रिश्तों को कैसे याद करते हैं?
डेटाबेस में, मैं वर्तमान में निम्नलिखित tablers है: परियोजना, व्यक्ति, पी के रूप में PersonId & ProjectId और एक FK रिश्ता के रूप में एक ProjectRoleId साथ ProjectRole Project_Person।
मैं वास्तव में यहां एक नुकसान में हूं क्योंकि मेरे द्वारा आने वाले सभी डोमेन मॉडल कुछ "डीडीडी" नियम तोड़ने लगते हैं। क्या इस समस्या के लिए कोई 'मानक' है?
मैंने एक सुव्यवस्थित ऑब्जेक्ट मॉडलिंग पर एक नज़र डाली थी और एक उदाहरण है कि एक परियोजना और प्रोजेक्ट मेम्बर कैसा दिखता है, लेकिन परियोजना में AddProjectMember() ProjectMember.AddProject() को कॉल करेगा। इसलिए परियोजना में परियोजना सदस्यों की एक सूची है, और प्रत्येक परियोजना मेम्बर में बदले में परियोजना का संदर्भ है। मुझे थोड़ा गड़बड़ लग रहा है।
अद्यतन
इस विषय के बारे में अधिक पढ़ने के बाद, मैं निम्नलिखित की कोशिश करेंगे: वहाँ अलग भूमिकाएं, मॉडल रिश्ते, कि मेरे डोमेन के भीतर एक निश्चित भूमिका प्रकार की कर रहे हैं, या बेहतर। उदाहरण के लिए, प्रोजेक्टमेम्बर एक अलग भूमिका है जो हमें किसी परियोजना के भीतर एक व्यक्ति के रिश्तों के बारे में कुछ बताती है। इसमें एक प्रोजेक्टमेम्बरशिप टाइप है जो हमें भूमिका के बारे में और बताता है। मुझे निश्चित रूप से पता है कि लोगों को एक परियोजना के अंदर भूमिका निभानी होगी, इसलिए मैं उस रिश्ते को मॉडल करूंगा।
ProjectMembershipTypes को बनाया और संशोधित किया जा सकता है। ये "प्रोजेक्ट लीडर", "डेवलपर", "बाहरी सलाहकार" या कुछ अलग हो सकते हैं।
किसी व्यक्ति के पास एक परियोजना के अंदर कई भूमिकाएं हो सकती हैं, और ये भूमिकाएं एक निश्चित तारीख से शुरू और समाप्त हो सकती हैं। इस तरह के संबंध क्लास ProjectMember द्वारा मॉडलिंग किए जाते हैं।
public class ProjectMember : IRole
{
public virtual int ProjectMemberId { get; set; }
public virtual ProjectMembershipType ProjectMembershipType { get; set; }
public virtual Person Person { get; set; }
public virtual Project Project { get; set; }
public virtual DateTime From { get; set; }
public virtual DateTime Thru { get; set; }
// etc...
}
प्रोजेक्टमेम्बरशिप टाइप: यानी। "परियोजना प्रबंधक", "डेवलपर", "सलाहकार"
public class ProjectMembershipType : IRoleType
{
public virtual int ProjectMembershipTypeId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
// etc...
}
मुझे कोई जानकारी नहीं है, यह संभव है, मुझे यकीन नहीं है कि आपका मतलब क्या है – kitsune
मुझे डर है कि मैं संबंधपरक डेटाबेस युग से तारीख हूं लेकिन बहुत अधिक ओओडी खाया ... मैं 'दूसरा समाधान' का जिक्र कर रहा हूं जेमी का जवाब – xtofl