有一个任务与状态变化相关。我非常困惑,认为它应该是一种基于事件的方法,其中涉及诸如CQRS
之类的内容,或者我可以使用State pattern
并将所有逻辑留在实体内。使用并入了状态模式的域模型
我发现它显示了一个域模型(或一块吧),其采用了一种状态模式的文章:http://www.prowareness.com/blog/?p=1448
订货系统非常接近我的域模型。所以这个例子很棒。但是我仍然想知道考虑MVC模式是否是一种好的做法,并且如果可以使用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 interface IStateFactory {
AbstractState GetState(String state);
}
最终的想法是把方法:
public void AlterState(String stateString) {
this.state = stateFactory.GetState(stateString);
}
- 是设计好的?什么是利弊?
- 可扩展性如何?从我的角度来看,可以扩展/实施自己的国有工厂。但是,如果
AbstractState
本身发生变化,则所有内容都会相应更改。
谢谢!
是的,我很感兴趣))! – lexeme 2012-08-01 05:56:39