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 与java的ioc框架实现的异同
4

6. Phalcon 的问题 4

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

8. 淋巴::atiioc 5

9. 参考 5

1. .IOC的之前

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

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

2. ioc后的实现

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

图3 IOC解耦过程

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

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected]

转载请注明来源: 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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-18 00:13:42

atitit.项目设计模式---ioc attilax总结的相关文章

atitit.项目设计模式---ioc&#160;attilax总结v4&#160;q11

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框

Atitit. 项目文档目录大纲 总集合 &#160;v2

Atitit. 项目文档目录大纲 总集合  v2 -----Atitti.原有项目源码的架构,框架,配置与环境说明 v3 q511 -----Atitit.开发环境 与 工具 以及技术框架 以及 注意事项 v2 .docx 我们推荐的开发理念与工具与技术 -----现有数据库表说明.docx ------功能表v2 q55 - 副本.xlsx 主要对客户需求进行了解析,结构化,归纳整理 -------训练系统需求具体内容  最新版 (1).doc(客户原始需求最新版) ------Atitti.

Atitit 项目中的勋章体系,,mvp建设&#160;,荣典体系建设

Atitit 项目中的勋章体系,,mvp建设 ,荣典体系建设 1. 荣典体系的标准1 2. 勋章称号1 2.1.1. 授予标准1 3. 政出多门  统一的荣誉制度 2 3.1. 法则规定2 3.2. 福利 2 3.3. 勋章样式2 4. 建立全球统一的荣典体系2 4.1. 巡回演讲,宣传布道3 5. 八个不同的核心驱动力.3 5.1. Core Drive 1: Epic Meaning & Calling(史诗意义&使命感):做比自己更重要的事情!3 1. 荣典体系的标准 德治,绩效,管

Atitit 项目语言的选择 java c#.net &#160;php??

Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来说,java优先2 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势 目前来看,工业型的语言只有java 和c#.net系列可以入选.不过综合考虑历史与未来长期趋势,java是唯一的选择. 如果确实要使用一些其他语言,建议限制在小范围模块内使用,防止扩散 1.2. 从个人职业生涯考虑,j

Atitit.文件搜索工具&#160;attilax&#160;总结

Atitit.文件搜索工具 attilax 总结 1. 指定目录按照体积大小精确搜索1 1.1. File Seeker 4.5 版本的可以,3.5版本的不行..1 2. 按照文件内容搜索1 2.1. File Seeker2 2.2. Notepad++2 2.3. FileLocator Pro 是一款专业的文件搜索软件,2 2.4. 百度硬盘搜索3 3. 在的3 1. 指定目录按照体积大小精确搜索 1.1. File Seeker 4.5 版本的可以,3.5版本的不行.. 2. 按照文件内

Atitit.rust语言特性&#160;attilax&#160;总结

Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会出现Null指针等等1 2.1.1. Rust 1.1 稳定版 更新内容1 2.1.2. Rust 1.2 测试版 更新内容2 3. RAII2 3.1. 无数据竞争(Data Race)…无需竞争的并发,Rust能够确保在并发编程中的数据安全3 4. 是基于继承的组合,Rust能基于继承实现组合,

Atitit 架构的原则attilax总结

1.1. Rule of three称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化".是DRY原则和YAGNI原则的折中1 1.2. 面向人类编程(可读性优先),优先于面向机器(性能)1 1.3. 归一化原则,一切都是文件,一切都是sprite1 1.4. 高层抽象原则,优先于具体实现,框架 类库优先于自己实现1 1.5. 移动小屏幕优先原则2 1.6. 点击触摸 优先于键盘 遥控操作2 1.7. 适当超前设计,超前抽象一层即可2 1.8. 超前架构

Atitit 项目文档规范化与必备文档与推荐文档列表

===========比较重要的必备文档========== 项目组名单通讯录( 包括项目组,客户沟通人等 需求文档 原型ui文档 开发计划表 项目源码与架构文档以及新结构文档 设计文档 (一般概要即可,重点模块单独详细设计) 数据库文档 注意事项 =========对开发比较重要的文档 Svn源码服务器账号密码 测试数据库账号密码信息 数据库sql脚本文件. 开发环境搭建文档 项目技术规范文档.(项目模式和产品模式有很多不同,需要单独分离) ======其他 测试说明文档 测试服务器部署账号信

Atitit 项目的主体设计与结构文档 v3

1. 实现的目标2 1.1. cross device跨设备(pc 手机 平板)作为规划2 1.2. 企业级Java体系与开发语言2 1.3. 高扩展性,高维护性,方便后期维护2 1.4. cross screen跨不同屏幕(兼容小屏幕)作为规划2 1.5. 跨语言标准化api2 1.6. 兼容性 与多版本管理3 1.7. 可读性dsl3 1.8. 跨平台规划,前期主要pc(微信平台等app内嵌,独立app内嵌,pc与手机与平板平台)3 1.9. 跨架构部署(支持多种部署方式,bs web cs