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

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

1. .IOC之前 1

2. ioc后的实现 1

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

4. 自己实现ioc 3

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

4.2. 每一个组件set 3

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

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

5. php javaioc框架实现的异同 4

6. Phalcon 的问题 4

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

8. 淋巴::atiioc 5

9. 參考 5

1. .IOC之前

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

软件系统中耦合的对象

2. ioc后的实现

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

3 IOC解耦过程

大家看到了吧。因为引进了中间位置的第三方。也就是IOC容器,使得ABCD4个对象没有了耦合关

 

作者:: 老哇的爪子 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 javaioc框架实现的异同

 组件的获得,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

原文地址:https://www.cnblogs.com/wgwyanfs/p/7083613.html