【发布时间】:2013-04-18 10:53:32
【问题描述】:
将数据和对这些数据进行操作的方法放在一个类中的机制称为封装。
不过遵循Open/Closed的原则,Dependency injection是通过暴露公共属性来实现的。
在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?
【问题讨论】:
-
你说“注入鼓励我们公开数据”是什么意思?
标签: oop design-patterns encapsulation
将数据和对这些数据进行操作的方法放在一个类中的机制称为封装。
不过遵循Open/Closed的原则,Dependency injection是通过暴露公共属性来实现的。
在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?
【问题讨论】:
标签: oop design-patterns encapsulation
这里有两件不同的事情需要考虑。让我们使用一个简单的“Person”示例。
一个人的属性可能包括名字、姓氏、出生日期等。为了保持封装,这些可能是私有的。如果你需要这个人的年龄,你必须让 Person 对象给你年龄,它会使用它的私有 dateOfBirth 来计算年龄。这可以防止在系统中的许多地方重复获取一个人的年龄的逻辑,如果 dateOfBirth 是公开的,这可能会受到鼓励。
Person 对象也可能依赖于其他对象。人不是自己创建这些对象,而是依赖系统中的其他实体来创建依赖项并将它们传入。Person 对象可能会公开公共属性来保存这些依赖项(或设置依赖项的方法)——这些不是一个人的属性,它们是一个人的依赖项。
这实际上是另一个只在一个地方有逻辑的例子——你的系统中有一个“东西”可以创建一个依赖项,而不是让许多对象都为自己创建这个依赖项。
【讨论】:
没有。 Encapsulation 并不意味着没有公共接口。Encapsulation 意味着只能通过特定的公共接口访问私有成员。
依赖注入通过public 设置器“注入”所需的对象。
【讨论】: