साथ शामिल का उपयोग एक इकाई के राज्य को बदलने के साथ जुड़ा हुआ एक काम नहीं है। और मैं काफी सोच संदेह में हूँ कि क्या यह एक घटना आधारित दृष्टिकोण जो CQRS
की तरह कुछ शामिल होना चाहिए या मैं एक State pattern
का उपयोग करें और संस्थाओं के अंदर सभी तर्क छोड़ सकते हैं। http://www.prowareness.com/blog/?p=1448एक डोमेन मॉडल एक राज्य पैटर्न
आदेश प्रणाली काफी मेरे डोमेन मॉडल के करीब है:
मैं एक लेख जो एक डोमेन मॉडल (या इसे का एक टुकड़ा) से पता चलता है एक राज्य पैटर्न का उपयोग करता है मिल गया है। तो उदाहरण महान है। लेकिन फिर भी मैं सोच रहा हूं कि एमवीसी पैटर्न पर विचार करना एक अच्छा अभ्यास है और यदि RavenDB/NHibernate
के साथ कार्यान्वित करना संभव है?
संपादित करें: प्रश्न की पुन: कल्पना
के उदाहरण का अनुसरण करते हैं:
सबसे पहले, यहाँ एक डोमेन इकाई Idea
कहा जाता है:
[Serializable]
public class Idea : AbstractEntity<Guid> {
private static IStateFactory stateFactory;
private AbstractState state = new InitiatedState();
[Required, StringLength(150)]
public String Title { get; set; }
[Required]
public String ProblemContext { get; set; }
public DateTime CreatedOn { get; set; }
public Guid InitiatorId { get; set; }
[Required]
public Decimal InvestmentAmount { get; set; }
public Boolean IsInitiated {
get { return this.state.IsInitiated; }
}
public Boolean IsRejected {
get { return this.state.IsRejected; }
}
public Boolean IsUnderInitialAssessment {
get { return this.state.IsUnderInitialAssessment; }
}
public Boolean IsConfirmedForImplementation {
get { return this.state.IsConfirmedForImplementation; }
}
}
AbstractState
जबकि जाता है:
public abstract class AbstractState {
public virtual Boolean IsInitiated {
get { return true; }
}
public virtual Boolean IsRejected {
get { return false; }
}
public virtual Boolean IsUnderInitialAssessment {
get { return false; }
}
public virtual Boolean IsConfirmedForImplementation {
get { return false; }
}
}
और राज्य कारखाने इंटरफ़ेस इस तरह परिभाषित किया गया है:
public void AlterState(String stateString) {
this.state = stateFactory.GetState(stateString);
}
- डिजाइन ठीक है:
public interface IStateFactory { AbstractState GetState(String state); }
अंतिम सोचा विधि डाल करने के लिए है? विपक्ष और पेशेवर क्या हैं?
- एक्स्टेंसिबिलिटी के बारे में क्या? मेरे परिप्रेक्ष्य से कोई अपने राज्य कारखाने को बढ़ा/कार्यान्वित कर सकता है। लेकिन अगर
AbstractState
में कोई बदलाव है तो तदनुसार सबकुछ बदल जाता है।
धन्यवाद!
हाँ, मुझे काफी दिलचस्पी है))! – lexeme