gpt4 book ai didi

asp.net-mvc - 使用结合了状态模式的域模型

转载 作者:行者123 更新时间:2023-12-04 12:11:12 25 4
gpt4 key购买 nike

有一个与 相关的任务改变实体状态 .而且我很困惑认为它是否应该是一种基于事件的方法,它涉及到 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; }
}
}

状态工厂接口(interface)定义如下:
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 一起使用,而且效果很好。

    编辑

    如果您有兴趣,我还有一个使用 Stateless 和 RavenDB 的实现。

    关于asp.net-mvc - 使用结合了状态模式的域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502463/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com