看过领域驱动设计并阅读有关作为反模式的贫血领域模型,认为可能应该将更多行为放入我们的领域实体。行为需要使用SOLID方法处理灵活性,因此需要DI框架和容器以允许将一些行为注入实体。
然而,实体的连接似乎不匹配,因为我们的实体将来自ORM框架,例如Entity Framework或NHibernate,以及来自依赖注入容器的行为。
我想你需要一种让ORM插入DI容器的方法。
只是想知道其他人在想要获得更丰富的模型时如何使用ORM和DI容器。
答案 0 :(得分:3)
1-使用ORM实体作为域实体不是一个好主意。因为您的域实体构成了DDD应用程序的核心,并且应该具有最小的依赖性。如果您决定将来更改ORM怎么办? ORM可以在您的存储库中使用,但请记住,在存储库返回之前,您需要将ORM实体映射到域实体。
2-您的域实体应该具有行为,但它们仅限于该实体。涉及其他服务或依赖项的任何行为都应该转到域服务。因此,您的域实体不会依赖其他服务。它们通常甚至不需要抽象,因此不需要使用IoC容器来解析它们。
答案 1 :(得分:0)
在Jimmy Bogard关于制作邪恶领域模型的this excellent video观看之后,我找到了一个可能的答案。
因此,您的域模型包含行为和丰富的方法,但您注入了域模型特定行为的方法,这些行为实现了一些接口,并且可以从DI容器中获取一些功能。
因此,通过改变您注入模型的内容,我们可以使用DI来改变其行为,同时仍然拥有丰富的域模型并通过ORM从数据库中检索它。