有一个与改变实体状态有关的任务。而且我很困惑认为它是否应该是一种基于事件的方法,它涉及类似的东西,CQRS
或者我可以使用 aState 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
本身发生了变化,那么一切都会相应地发生变化。
谢谢!