atitit.项目设计模式---ioc attilax总结
4.3. 一种实用和优雅的来解决这些问题,是使用容器的依赖注入 3
4.4. 使用 vm 注入,隐藏注入,golbal 变量.. 4
1. .IOC的之前
我们知道在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑[1]。
图1 软件系统中耦合的对象
2. ioc后的实现
IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。如下图:
图3 IOC解耦过程
大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
3. 认识引入IOC框架的缺点,
做到心中有数,杜绝滥用框架[1]。
第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。
第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。
第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。
虽然实现了依赖注入,但是由于php本身是一种弱类型的语言,当类型发生变化时并不会报错,从而失去了ioc的精髓,因此有其形而无其神。
4. 自己实现ioc
4.1. ioc框架的实现原理map+容器法
理解PHP 依赖注入 Laravel IoC容器 - ◆gHOST◇的专栏 - 博客频道 - CSDN.NET.htm
将的是Phalcon 的ioc实现原理
4.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方法。为了解决这个问题,我们再次返回去使用一个全局注册表来创建组件。但是,在创建对象之前,它增加了一个新的抽象层:
4.3. 一种实用和优雅的来解决这些问题,是使用容器的依赖注入
,像我们在前面看到的,容器作为全局注册表,使用容器的依赖注入做为一种桥梁来解决依赖可以使我们的代码耦合度更低,很好的降低了组件的复杂性:
1. //Pass the service container as unique parameter
2. $some = new SomeComponent($di);
3.
4. $some->someTask();
4.4. 使用 vm 注入,隐藏注入,golbal 变量..
通过include来注入...
5. php 与java的ioc框架实现的异同
组件的获得,php要手动使用str做为组件名称寻找...java的可以通过注解寻找...
6. Phalcon 的问题
Phalcon 是个dll 。。。。。也有对应版本关系。。麻烦。。这个亚能实现di ioc了。。
7. 注入 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 |
8. 淋巴::atiioc
Laravel重的一塌糊涂、向后兼容性差不说,代码风格方面还用tab来缩进!
Laravel的可借鉴之处例如:IoC,DI,eloquent,Artisan这些Phalcon全都有,性能还更好(能比这个框架快的PHP框架不多了,唯一能抗衡的是YAF吧,但YAF那社区,那文档,呵呵了)。
9. 参考
浅谈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