0

我们有 N 层应用程序,我们尝试在设计时考虑到 DDD。该应用程序作为 REST 服务公开。我们有一个利用状态模式的域实体。状态的接口是这样的

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

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

虽然这允许我们在域中拥有相当干净的代码,但在服务层却很痛苦:我们使用单独的 REST 资源来更改实体的状态(例如,我们PUT /result要这样做)。让我哭泣的问题是,我们switch在 DTO 的新状态下可以选择这三种方法中的一种(我猜唯一的方法是在应用程序层中)。

将三个“Set*”方法合并为一个是个好主意吗?如果没有,请建议另一个重构!

4

1 回答 1

1

将三个“Set*”方法合并为一个是个好主意吗?

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

于 2013-05-16T17:20:17.890 回答