asp.net-mvc – 使用与状态模式合并的域模型
发布时间:2020-05-24 15:52:46 所属栏目:asp.Net 来源:互联网
导读:有一项任务与改变实体的状态有关.而且我很困惑,想一想它是否应该是一个基于事件的方法,它涉及像CQRS这样的东西,或者我可以使用State模式并将所有逻辑留在实体中. 我发现了一篇文章,其中显示了使用状态模式的域模型(或其中一部分):http://www.prowareness.com
|
有一项任务与改变实体的状态有关.而且我很困惑,想一想它是否应该是一个基于事件的方法,它涉及像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 webservice处理gzip压缩请求
- 如何关闭ASP.NET必需的字段验证器“丢失焦点”行为
- asp.net-mvc – 我有15分钟向我的同事介绍ASP.NET MVC 我应
- asp.net – 会话状态在此上下文中不可用
- asp.net-mvc – 通过伪造上下文测试:实体框架
- entity-framework-4 – 当超出范围时,Ninject不调用对对象的
- asp.net-mvc – 在Hub,SignalR之外获取connectionId
- asp.net-mvc – UpdateModel前缀 – ASP.NET MVC
- asp.net – web.config中的元素和项目文件之间有什么不同
- ASP.NET Web API应用程序中的Autofac多租户IoC容器
推荐文章
站长推荐
- asp.net-mvc – 使用带有MVC3的plupload
- asp.net-core – 如何从MVC 6中的ASP.Net 5 Tag
- asp.net-mvc – IIS劫持CORS Preflight OPTIONS请
- asp.net-mvc-3 – 自定义ActionInvoker与MVC 3中
- asp.net-mvc – 授权属性生命周期
- ASP.Net自定义客户端验证
- asp.net-mvc – ASP.NET MVC – CustomeAuthoriz
- asp.net-mvc – 用于测试目的的假开放ID提供程序
- asp.net – 在客户端启用/禁用RequiredValidator
- asp.net – 从ASPX中的URL检索GET变量
热点阅读
