asp.net-mvc – 使用与状态模式合并的域模型
发布时间:2020-12-16 04:04:29 所属栏目:asp.Net 来源:网络整理
导读:有一项任务与改变实体的状态有关.而且我很困惑,想一想它是否应该是一个基于事件的方法,它涉及像CQRS这样的东西,或者我可以使用State模式并将所有逻辑留在实体中. 我发现了一篇文章,其中显示了使用状态模式的域模型(或其中一部分):http://www.prowareness.co
有一项任务与改变实体的状态有关.而且我很困惑,想一想它是否应该是一个基于事件的方法,它涉及像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); } >设计好吗?有什么缺点和优点? 谢谢! 解决方法
您可能对Nicholas Blumhardt的分层状态机Stateless感兴趣.阅读本章
SO answer here关于它的功能.这是一个
simple workflow processor example from my blog,我目前使用它与
the Pipe and Filter pattern,它的工作非常好.
编辑 如果您有兴趣,我也有一个使用Stateless和RavenDB的实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-2 – 在名称中使用连字符处理MVC2变量
- WCF服务与ASP.NET Web Api
- asp.net-mvc – Razor视图引擎优于其他视图引擎的优点是什么
- asp.net-mvc-4 – Html.LabelFor始终显示属性名称而不是值
- asp.net-mvc – 传入字典的ASP.NET MVC模型项是类型的
- asp.net – 使用Groups进行分页的SignalR
- asp.net – Webforms与MVC.一旦你开始使用MVC ..你有没有回
- asp.net-mvc – 获取当前用户的角色
- 如何在ASP.NET中以程序方式模拟HTTP POST?
- asp.net – 帮助捕获StackOverflowException与WinDbg和ADPl