如何避免贫血领域模型与ORM,依赖注入和Solid方法一起使用

时间:2013-12-06 22:19:26

标签: entity-framework orm dependency-injection domain-driven-design

看过领域驱动设计并阅读有关作为反模式的贫血领域模型,认为可能应该将更多行为放入我们的领域实体。行为需要使用SOLID方法处理灵活性,因此需要DI框架和容器以允许将一些行为注入实体。

然而,实体的连接似乎不匹配,因为我们的实体将来自ORM框架,例如Entity Framework或NHibernate,以及来自依赖注入容器的行为。

我想你需要一种让ORM插入DI容器的方法。

只是想知道其他人在想要获得更丰富的模型时如何使用ORM和DI容器。

2 个答案:

答案 0 :(得分:3)

1-使用ORM实体作为域实体不是一个好主意。因为您的域实体构成了DDD应用程序的核心,并且应该具有最小的依赖性。如果您决定将来更改ORM怎么办? ORM可以在您的存储库中使用,但请记住,在存储库返回之前,您需要将ORM实体映射到域实体。

2-您的域实体应该具有行为,但它们仅限于该实体。涉及其他服务或依赖项的任何行为都应该转到域服务。因此,您的域实体不会依赖其他服务。它们通常甚至不需要抽象,因此不需要使用IoC容器来解析它们。

答案 1 :(得分:0)

在Jimmy Bogard关于制作邪恶领域模型的this excellent video观看之后,我找到了一个可能的答案。

因此,您的域模型包含行为和丰富的方法,但您注入了域模型特定行为的方法,这些行为实现了一些接口,并且可以从DI容器中获取一些功能。

因此,通过改变您注入模型的内容,我们可以使用DI来改变其行为,同时仍然拥有丰富的域模型并通过ORM从数据库中检索它。