DDD-贫血与富域模型

时间:2019-09-29 22:13:59

标签: architecture domain-driven-design

我读过Eric Evan的DDD书,他(以及Fowler等人)似乎认为Anemic Domain Models是一种反模式。

所以我只是真的想对这个问题有一些了解。

我也确实在寻找Rich Domain模型的一些好(基本)示例,以及它提供的Anemic Domain Model带来的好处。

1 个答案:

答案 0 :(得分:0)

让我们假设您编写了一些代码来解决复杂的业务问题。如果您有贫血领域模型,那么

  

您的对象几乎没有任何行为,使它们只不过是一堆吸气剂和吸气剂。 [..]相反,有一组服务对象捕获所有域逻辑,执行所有计算并使用结果更新模型对象。

Wiki上有一个非常简单的示例:

贫血

$post_categories = sql_select_many("SELECT * FROM `post_categories` where is_active=1", $connection)["rows"];

非贫血

class Box
{
    public int Height { get; set; }
    public int Width { get; set; }
}

您还可以参考沃恩·弗农(Vaughn Vernon)的《实现领域驱动的设计》一书中的示例示例IDDD_Samples repo on GitHub,了解有限的上下文。那里有很多很好的例子。

隐藏对象的内部,可以防止用户将组件的内部数据设置为无效或不一致的状态,从而保护其完整性。如果您的业务问题很复杂并且模型贫乏,那么您的代码将很快变得难以维护。添加新功能会让您头疼,并且持续时间会越来越长。该代码将难以辨认且不可测试。

还有Martin's Fowler site上的贫血域模型的更多信息。