3

我不确定在应用程序中应该在哪些用例中使用 DI。我知道注入诸如PlaceServiceor之类的服务CalculationService非常合适,但我是否也应该使用 DI 来创建我的域对象,比如 a User?如果User只有一个需要名字和姓氏的构造函数会怎样。这可以用 DI 解决吗?

我应该使用 DI 为 Set/List 接口创建实例还是这纯粹是矫枉过正?

我主要使用guice。

4

2 回答 2

4

ig0774 的答案是一个很好的起点。此外,我想提供这个经验法则:

领域驱动设计的术语中,您应该 DI 用于服务,而不是用于实体值对象

换句话说,DI 非常适合概念上长期存在的无状态对象,这些对象通常使用一个或已知数量。

于 2010-06-18T03:28:05.597 回答
2

一般来说,我使用的规则是支持依赖注入,除非对象可以用纯原始值构造,并且对象可能被另一个实现替换的可能性很小。

但是,对于域对象,特别是如果您的对象不构成贫血的域模型,即对象只是 getter 和 setter 的袋子,拥有可以将自身持久保存到数据存储等的对象可能很有用. 对于那些对象,依赖注入和Salve可以是一个强大的组合。

Guice 对像您的 User 对象这样的对象所带来的问题类型有一个特定的解决方案,称为AssistedInject,尽管使用其他轻量级容器或使用构建器或适配器模式也可以实现类似的事情。

于 2010-06-18T00:57:04.517 回答