有一项任务与改变实体的状态有关.而且我很困惑,想一想它是否应该是一个基于事件的方法,它涉及像CQRS这样的东西,或者我可以使用State模式并将所有逻辑留在实体中.
我发现了一篇文章,其中显示了使用状态模式的域模型(或其中一部分):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本身发生了变化,一切都会相应变化.
谢谢!
解决方法
您可能对Nicholas Blumhardt的分层状态机Stateless感兴趣.阅读本章
SO answer here关于它的功能.这是一个
simple workflow processor example from my blog,我目前使用它与
the Pipe and Filter pattern,它的工作非常好.
编辑
原文地址:https://www.jb51.cc/aspnet/247116.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。