2013-04-18 44 views
2

将对这些数据进行操作的方法的数据放入一个类中的机制称为封装。不属性依赖注入违反封装原则吗?

但是要遵循Open/Closed原则,Dependency injection是通过暴露公共属性来实现的。

在这种情况下封装&依赖注入似乎相互矛盾,不是吗?

+0

当你说“注入鼓励我们公开数据”时,你是什么意思? – tbsalling

回答

3

这里有两个不同的事情需要考虑。让我们用一个简单的“Person”例子。

一个人的属性可能包括firstName,lastName,dateOfBirth等等。为了保持封装,这些可能是私有的。如果你需要这个人的年龄,你将不得不要求Person对象给你年龄,并且它会使用它的私人约会来计算年龄。这可以防止在系统中的许多地方复制人的年龄的逻辑,如果dateOfBirth是公开的,可能会受到鼓励。

Person对象也可能依赖于其他对象。这个人不是自己创建这些对象,而是依赖系统中的其他实体来创建依赖关系并将它们传入.Person对象可能公开属性来保存这些依赖关系(或设置依赖关系的方法) - 这些不是一个人的属性,他们是一个人的依赖。

这实际上是另一个只在一个地方拥有逻辑的例子 - 系统中有一个可以创建依赖关系的“事物”,而不是有许多对象都为自己创建依赖关系。

3

Encapsulation并不意味着没有公共接口。
Encapsulation意味着只有通过特定的公共接口访问私人成员。
依赖注入通过public设置器“注入”所需的对象。