域中的状态模式可能会严重影响服务层

时间:2013-05-15 13:22:25

标签: .net rest design-patterns domain-driven-design

我们有N层应用程序,我们尝试用DDD设计。该应用程序作为REST服务公开。 我们有一个利用状态模式的域实体。州的界面就像这样

interface IDomainObjectState
{
    void SetPassed();
    void SetFailed();
    void SetIncomplete();
    void Pause();
    void Block();
}

此实体还具有“状态”字段。如果对象的状态允许,则以“Set”开头的状态方法应该更改此字段。

虽然这允许我们在Domain中拥有相当干净的代码,但在服务层却很痛苦:我们使用单独的REST资源来更改实体的状态(例如,我们PUT /result来执行此操作)。令我哭泣的问题是我们在DTO中的新状态switch上选择了这三种方法中的一种(我认为唯一的方法是在Application层中)。

将三个“Set *”方法合并为一个是不错的主意?如果不是,请建议另一个重构!

1 个答案:

答案 0 :(得分:1)

  

将三个“Set *”方法合并为一个是不错的主意?

如果唯一的动机是简化与HTTP接口的集成,那不是一个好主意。 IMO,一个switch语句并不可怕,因为它是适配器/ ACL代码的一部分,它通常很简单,易于测试,不需要很好的设计。理想情况下,HTTP适配器将调用封装手头行为的应用程序服务。如果你愿意,你可以在特定的HTTP资源/动词组合和应用程序服务方法之间创建一个映射,但这并没有增加太多的整体价值。