2 回答
TA贡献2041条经验 获得超4个赞
我试着搜了一下,中文资料基本都把IoC(控制翻转)和DI(依赖注入)混为一谈,就连StackOverflow上的第一位答案也犯了同样的问题(幸好下面有高票的反对评论,否则我的世界观都快坏掉了)
控制翻转是代码复用的一种模式(注意不是设计模式)
一般(非IoC)的复用,通常是用户代码调用组件(任意形式的被复用的代码,本答案中统称为组件)。也就是用户代码解决“Why it works, What to do”,组件解决“How to do”,逻辑的入口是用户代码,
而控制翻转则是组件来调用用户代码,也就是组件解决“Why it works, When to do”,用户代码解决“What to do”,逻辑的入口是组件
下面是除了DI之外的控制翻转的例子
接口/虚函数 组件调用接口/虚函数,具体由用户代码实现
发布订阅(事件)模式 组件触发事件,用户代码订阅事件
回调 用户代码写回调,组件来调用
几乎所有能被称之为框架的东西 用户代码在规定的地方实现具体业务逻辑,剩下的框架负责
TA贡献1772条经验 获得超8个赞
通俗的说,一个项目由各个类组成。一个类在一个项目会被很多地方使用。
如果按照传统的写法就是每个用的地方都需要
new Class()
如果参数很复杂,每个地方都需要new Class(param1, param2, param3, ..)
此时每次修改类的构造函数, 那么每个地方需要跟着修改。工作量大,耦合度高。
但是可以把需要使用的类,初始化一次,放到一个容器中保存起来,其他需要使用的地方,
只需要调用容器的方法Container->getClassINeed()
那么,使用这个类和生成这个类通过中间的容器分开了。
示例可以看Phalcon
框架,文档里给的例子,教你一步步搭建自己的容器
一些管理对象生成的设计模式,本身也算一种容器的实现, 例如常见的工厂模式
- 2 回答
- 0 关注
- 799 浏览
添加回答
举报