atitit.项目设计模式---ioc attilax总结v4 q11

1. ioc的原理1

1.1. .IOC的之前1

1.2. ioc后的实现2

1.3. ioc的演化2

1.4. 依赖注入和控制反转是同一概念吗?3

2. IoC的实现模式di 与 service loctor4

3. Ioc实现的三种模式:构造函数注入,属性注入(推荐),接口注入4

3.1. 容器的依赖注入...注入容器(推荐)4

3.2. Atitit.ioc容器的设计 lazy加载模式.doc4

4. 认识引入IOC框架的缺点,4

5. 自己实现ioc5

5.1. ioc框架的实现原理map+容器法5

5.2. 每个组件set法5

5.3. 一种实用和优雅的来解决这些问题,是使用容器的依赖注入6

5.4. 使用 vm 注入,隐藏注入,golbal 变量..6

6. php 与java的ioc框架实现的异同6

6.1. Phalcon 的问题6

6.2. 注入 Laravel 虚拟主机安装的问题6

7. 淋巴::atiioc8

8. atitit.ioc框架选型 java php8

9. 资料8

10. 参考8

1. ioc的原理

1.1. .IOC的之前

我们知道在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑[1]。

图1 软件系统中耦合的对象

1.2. ioc后的实现

IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。如下图:

图3 IOC解耦过程

大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关

1.3. ioc的演化

 不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。在理解依赖注入之前,看如下这个问题在各种社会形态里如何解决:一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。

  (1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序里的调用者自己创建被调用者。

  (2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。对应Java程序的简单工厂的设计模式。

  (3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。对应Spring的依赖注入。

  第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。

  第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。

  第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

1.4. 依赖注入和控制反转是同一概念吗?

根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描 述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器 反向的向应用程序注入应用程序所需要的外部资源。

2. IoC的实现模式di 与 service loctor

“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太重要,更重要的是:应该将组件的配置与使用分离开——两个模式的目标都是这个。

Refer Atitit.ioc的实现模式 di servicelocator的区别与联系v2 paa

3. Ioc实现的三种模式:构造函数注入,属性注入(推荐),接口注入

接口注入

将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。为了采取接口注入的方式

由于通过接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡采用这种方

3.1. 容器的依赖注入...注入容器(推荐)

3.2. Atitit.ioc容器的设计 lazy加载模式.doc

Map(k,obj)

K,delegate

4. 认识引入IOC框架的缺点,

做到心中有数,杜绝滥用框架[1]。

第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。

第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。

第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。

第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。

虽然实现了依赖注入,但是由于php本身是一种弱类型的语言,当类型发生变化时并不会报错,从而失去了ioc的精髓,因此有其形而无其神。

5. 自己实现ioc

5.1. ioc框架的实现原理map+容器法

理解PHP 依赖注入 Laravel IoC容器 - ◆gHOST◇的专栏 - 博客频道 - CSDN.NET.htm

将的是Phalcon 的ioc实现原理

5.2. 每个组件set法

1. $some = new SomeComponent();

2.

3. //Pass the connection defined in the registry

4. $some->setConnection(Registry::getConnection());

5.

6. $some->someDbTask();

1. $some->setConnection($connection);

2. $some->setSession($session);

3. $some->setFileSystem($fileSystem);

4. $some->setFilter($filter);

5. $some->setSelector($selector);

我想,我们不得不在应用程序的许多地方创建这个对象。如果你不需要依赖的组件后,我们又要去代码注入部分移除构造函数中的参数或者是setter方法。为了解决这个问题,我们再次返回去使用一个全局注册表来创建组件。但是,在创建对象之前,它增加了一个新的抽象层:

5.3. 一种实用和优雅的来解决这些问题,是使用容器的依赖注入

,像我们在前面看到的,容器作为全局注册表,使用容器的依赖注入做为一种桥梁来解决依赖可以使我们的代码耦合度更低,很好的降低了组件的复杂性:

1. //Pass the service container as unique parameter

2. $some = new SomeComponent($di);

3.

4. $some->someTask();

5.4. 使用 vm 注入,隐藏注入,golbal 变量..

通过include来注入...

6. php 与java的ioc框架实现的异同

组件的获得,php要手动使用str做为组件名称寻找...java的可以通过注解寻找...

6.1. Phalcon 的问题

Phalcon 是个dll 。。。。。也有对应版本关系。。麻烦。。这个亚能实现di ioc了。。

6.2. 注入 Laravel 虚拟主机安装的问题

wanganlin21 发表于 2013-9-5 09:42 
难道url要通过 http://www.domain.com/public 来访问?
毕竟虚拟空间无法将目录绑定到 public 目录上。 ...

是的,如果不支持 htaccess 那就放弃吧。

This solution enables you to drop Laravel into your public folder then use a .htaccess file to redirect requests to the public folder. This solution places your application and core system code into a publicly accessible folder. This is not something that we encourage you to do with any PHP framework.

Step 1. Place Laravel in your document root folder.

Step 2. Place the following .htaccess file in your document root folder.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Step 3. Make sure that you manually set your 'url' configuration in application/config/application.php otherwise Laravel will generate incorrect URLs. Make sure that each of your environments have the correct application.url configuration. For more information on environment-specific configurations see:http://laravel.com/docs/install#environments

That's all.

发表于 2014-9-10 13:59:59 | 只看该作者

现在的虚拟主机大部分 php版本 不支持laravel

7. 淋巴::atiioc

Laravel重的一塌糊涂、向后兼容性差不说,代码风格方面还用tab来缩进!

Laravel的可借鉴之处例如:IoC,DI,eloquent,Artisan这些Phalcon全都有,性能还更好(能比这个框架快的PHP框架不多了,唯一能抗衡的是YAF吧,但YAF那社区,那文档,呵呵了)。

8. atitit.ioc框架选型 java php

spring  guice

phpp::

9. 资料

http://v4.golaravel.com/docs/4.2/ioc

php的微核心容器 PHPiocContainer-CSDN论坛-CSDN.NET-中国最大的IT技术社区.htm

10. 参考

浅谈IOC--说清楚IOC是什么 - DebugLZQ - 博客园.htm

用PHP实现简单的IoC控制反转 -- 简明现代魔法.htm

理解PHP 依赖注入 Laravel IoC容器 - ◆gHOST◇的专栏 - 博客频道 - CSDN.NET.htm

理解PHP 依赖注入 Laravel IoC容器 - ◆gHOST◇的专栏 - 博客频道 - CSDN.NET.htm

Laravel-简洁、优雅的PHP开发框架(PHP Web Framework)。- Laravel中文网(Laravel中国社区.htm

透透彻彻IoC(你没有理由不懂!) - stamen的程序员之路 - ITeye技术网站.htm

atitit.ioc框架选型 java php.doc

转载于:https://www.cnblogs.com/attilax/p/5963588.html

atitit.项目设计模式---ioc attilax总结v4 q11相关推荐

  1. Atitit 手机号码选号 规范 流程 attilax总结 v4 s81.docx 1. Keyword关键词 2 2. 靓号的定义 2 3. 靓号的重要意义 与解决问题 为什么我们需要靓号

    Atitit  手机号码选号 规范 流程  attilax总结 v4 s81.docx 1. Keyword关键词 2 2. 靓号的定义 2 3. 靓号的重要意义 与解决问题 为什么我们需要靓号指南, ...

  2. Atitit 号码规范 靓号指南 attilax总结 v4 r926.docx 1. Keyword关键词 2 2. 为什么我们需要靓号指南,因为很多人手机号都是瞎选乱选,没有规范不成方圆

    Atitit   号码规范  靓号指南   attilax总结 v4 r926.docx 1. Keyword关键词 2 2. 为什么我们需要靓号指南,因为很多人手机号都是瞎选乱选,没有规范不成方圆 ...

  3. Atitit 项目的主体设计与结构文档 v5

    Atitit 项目的主体设计与结构文档 v5 1. 版本历史说明2 2. 功能大概说明2 3. 实现的目标3 3.1. cross device跨设备(pc 手机 平板)3 3.2. cross sc ...

  4. Atitit 算法之道 attilax著 1. 编码算法 3 1.1. Base64 htmlencode urlencode 3 2. Ui方面的算法 3 2.1. 软键盘算法 计算软键盘上下

    Atitit 算法之道 attilax著 1. 编码算法 3 1.1. Base64 htmlencode  urlencode 3 2. Ui方面的算法 3 2.1. 软键盘算法  计算软键盘上下左 ...

  5. Atitit 外包管理规范attilax总结

    Atitit 外包管理规范attilax总结 1. 常见的外包问题2 1.1. 使用了过时的语言与技术2 1.2. 不易扩展的架构,架构落后2 1.3. 使用了小众语言,框架类库,组件等技术,导致维护 ...

  6. Atitit 学习方法 补充 艾龙 著 attilax著 1. Atitit 学习的方法 attilax总结 1 1.1. 2. 基于学习策略的分类 2机械 示教 演绎 类比 解释 归纳 2 1.

    Atitit 学习方法  补充 艾龙 著 attilax著 1. Atitit 学习的方法 attilax总结 1 1.1. 2. 基于学习策略的分类 2机械 示教 演绎 类比 解释 归纳 2 1.2 ...

  7. Atitit.文件搜索工具 attilax 总结

    Atitit.文件搜索工具 attilax 总结 1. 指定目录按照体积大小精确搜索1 1.1. File Seeker 4.5 版本的可以,3.5版本的不行..1 2. 按照文件内容搜索1 2.1. ...

  8. Atitit.rust语言特性 attilax 总结

    Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...

  9. Atitit.异步的实现模式attilax大总结

    Atitit.异步的实现模式attilax大总结 1.1. 函数回调(包括的future模式)1 1.2. 事件机制( 包括定时器 listeners 1 1.3. 中断机制1 1.4. 订阅机制 发 ...

  10. Atitit 项目中的俩大孤岛问题 项目孤岛 编程语言孤岛 项目管理 目录 1. 孤岛效应 1 1.1. 功能重复建设 不同项目组,不同语言的功能重复建设 1 1.2. 人员互相支援不利,项目

    Atitit 项目中的俩大孤岛问题  项目孤岛  编程语言孤岛 项目管理 目录 1. 孤岛效应 1 1.1. 功能重复建设  不同项目组,不同语言的功能重复建设 1 1.2. 人员互相支援不利,项目组 ...

最新文章

  1. 江湖又现中科大少年班的传说
  2. Tomcat怎样将配置文件放在外部
  3. java读取ES配置生成ES管理类,获取ES连接
  4. vim 打造属于自己的 IDE
  5. 为什么传值时加号变成了空格_为什么中英文字间距不一样?我想谈谈我的理解...
  6. 数据库oracle 笔试,数据库oracle笔试
  7. django模板的使用方法
  8. 使用tc对linux中某ip段限速
  9. 【高效生活】如何将csf格式文件转化成其它格式
  10. 【英语阅读】纽约时报 | “流浪作家”三毛:撒哈拉、爱情和死亡
  11. 又是一年新来到,别墅翻新要趁早
  12. 从零开始学前端 - 3. HTML 常用标签_2
  13. 2014-2015 少年辛苦终身事,莫向光阴惰寸功
  14. 用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)...
  15. windows开启SMB服务
  16. 利用高德地图实现定位功能
  17. 日常论文分享---持续更新中
  18. 太阳能发电系统的构成及简单工作原理
  19. 政客常用手段_我可以比政客更好地管理经济
  20. 搭建git私有化仓库

热门文章

  1. 关于.net 页面提交后 css失效或者部分失效的问题
  2. keras-bert学习
  3. 【问答】总结|开放领域问答梳理系列(1)
  4. 【论文分享】ACL 2020 细粒度情感分析方法
  5. 【NLP基础】信息抽取(Information Extraction:NER(命名实体识别),关系抽取)
  6. 数据预处理—7.数据插补之拉格朗日插值法、牛顿差值法及python实现
  7. 书单|互联网企业面试案头书之架构师篇
  8. 游戏设计规则探秘之提高动词的健壮性
  9. 什么是CTS、CLS和CLR
  10. 在Ubuntu 16.04 使用命令行安装Nvidia CUDA-9.0以及cudnn7