CI的扩展机制
CI的扩展机制
在熟悉了CI的源码之后,它的简单明了的代码风格很有趣,这篇文章看看在CI是如何实现扩展的.
扩展包
扩展是为了完成特定的功能,在CI中,扩展包的开发只能在application/libraries 下.CI并没有对扩展进行任何限定,所以在CI开发扩展是不没有学习成本的.
扩展是与Controller通讯的,所以调用方式是这样:$this->load->library('newLibrary').可以查看CI中系统的library:一个扩展基本上只有一个类来完成,虽然用到了类,但并没有完全执行面向对象的中开发原则,仔细地看代码可以发现,这些类基本上都是面向过程的(面向对象与面向过程编程的核心区别在于职责的分配),也就只做了封装.从这一点可以看出来,library的目的只是为了实现CI的设计与架构目标.所以拒绝了复杂的面向对象.
所以,开发起来就只有一个需要注意的--尽量用一个类文件来完成
对系统进行扩展
CI是以简明著称,它所提供的功能足以满足使用该框架的需要,但特殊情况不可避免,有时候需对CI系统进行一点小小的改动,这时,就需要对该系统进行扩展了,如何解决?这一点CI已经为我们开放了接口--扩展框架核心
要能使用它所提供的功能,就需明白"钩子","挂钩点".
钩子
这个名称起的好,该名称很好的展现了在系统中"钩子"的作用.与在生活中的使用场景一样,钩子就是用来勾住东西的.在系统中一样,钩子用来勾住需要的类,用类做点什么,所以示例中是所展现的意思就很清晰了
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'MyMethod',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
挂钩点
钩子必须要属于谁,就像一个鱼钩钓起来的鱼当然属于这个钓鱼的人了,所以系统的中"钩子"就属于"挂钩点",这样,我们就可以通过"挂钩点"使用这个钩子.
为什么要这样做? 在CI中,框架并大量没有运用面向对象,所以钩子这个概念是面向对象中观察者模式的一个非面向对象的实践.这个概念在wordpress中同样存在,同样wordpress也未大量使用面向对象.
总结
CI中的扩展分为以上两种,要理解起来并不难,熟悉熟悉它的代码风格就比较容易理解各部分的工作机制了.
CI的扩展机制的更多相关文章
- Dubbo中SPI扩展机制解析
dubbo的SPI机制类似与Java的SPI,Java的SPI会一次性的实例化所有扩展点的实现,有点显得浪费资源. dubbo的扩展机制可以方便的获取某一个想要的扩展实现,每个实现都有自己的name, ...
- Kubernetes 降本增效标准指南 | 基于K8s 扩展机制构建云上成本控制系统
作者 王玉君,腾讯云后台高级开发工程师,负责腾讯云原生系统开发及建设. 晏子怡,腾讯云容器产品经理,在K8s弹性伸缩.资源管理领域有丰富的实战经验. 导语 Kubernetes 作为 IaaS 和 P ...
- Spring 的微内核与FactoryBean扩展机制--转载
作者:江南白衣 原文地址: http://www.blogjava.net/calvin/archive/2005/08/30/11099.html http://www.blogjava.net/c ...
- SOFA 源码分析 — 扩展机制
前言 我们在之前的文章中已经稍微了解过 SOFA 的扩展机制,我们也说过,一个好的框架,必然是易于扩展的.那么 SOFA 具体是怎么实现的呢? 一起来看看. 如何使用? 看官方的 demo: 1.定义 ...
- Redis扩展机制
Redis扩展机制扫盲 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Redis的Avalibility解决方案有很多,比如Twemproxy,Codis, 一.Twempro ...
- Spring.factories扩展机制
和Java SPI的扩展机制类似,Spring Boot采用了spring.factories的扩展机制,在很多spring的starter 包中都可以找到,通过在 META-INF/spring.f ...
- 聊聊spring的那些扩展机制
1.背景 慎入:本文将会有大量代码出入. 在看一些框架源码的时候,可以看见他们很多都会和Spring去做结合.举个例子dubbo的配置: 很多人其实配置了也就配置了,没有去过多的思考:为什么这么配置s ...
- 从ExtensionLoader理解Dubbo扩展机制
Dubbo的扩展机制是怎么实现的?最简单的回答就是@SPI. Dubbo的插件化思路来源于Java SPI. JAVA SPI 机制 SPI的全名为Service Provider Int ...
- atitit.编程语言 类与对象的 扩展机制.doc
atitit.编程语言 类与对象的 扩展机制.doc 1.1. Java 下一代: 没有继承性的扩展1 1.2. 继承1 1.3. 使用cglib动态为Java类添加方法1 1.4. 工具类 1 1. ...
随机推荐
- C++ 析构函数为虚函数
1.原因: 在实现多态时, 当用基类指针操作派生类, 在析构时候防止只析构基类而不析构派生类. 2.例子: (1). #include<iostream> using namespace ...
- 从汇编看c++的虚拟继承以及其内存布局(一)
先看第一种最简单的情形,所有类中没有任何虚函数的菱形继承. 下面是c++源码: class Top {//虚基类 public: int i; Top(int ii) { i = ii; } }; c ...
- weblogic配置domain和删除domain
weblogic创建域的过程比较简单,但是在创建域之前一定要注意不能存在重名的domain. Domain简单定义为:是一个逻辑管理单元,Domain下面包含着weblogic应用服务器中的所有东西, ...
- xstream对象xml互转
1.引入jar包 xpp3_min-1.1.4c.jarxstream-1.4.8.jar 2.建立java bean package com.jdw.bean; import java.util.A ...
- ubtuntu 下 使用svn命令
SVN作为日常开发中不可缺少的工具,今天终于开始在Ubuntu下使用了. 1.首先需要安装SVN.Ubuntu下的SVN安装十分简单,sudo apt-get install subversion,然 ...
- windows内存管理方式以及优缺点
Windows内存管理方式:页式管理,段式管理,段页式管理 页式管理 将各进程的虚拟空间(逻辑地址)划分为若干个长度相等的页,业内管理把内存空间(物理内存)按照页的大小划分为片或者页面,从而实现了离散 ...
- web安全测试工具介绍---webscarab
webscarab: 这主要是一款代理软件或许没有其它的工具能和OWASP的WebScarab如此丰富的功能相媲美了,如果非要列举一些有用的模块的话,那么他们包括HTTP代理,网络爬行.网络蜘蛛,会话 ...
- HeadFirst设计模式读书笔记(5)-单例模式
单例模式:确保一个类只有一个实例,并提供一个全局访问点. 应用场景:数据库连接.线程池.缓存.对话框.处理偏好设置.注册表的对象.日志对象.充当打印机.显卡等设备的驱动程序对象.任务管理器.网站的计数 ...
- (十一)boost库之多线程间通信
(十一)boost库之多线程间通信 1.互斥锁 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一 ...
- 杭电oj 3079 Vowel Counting
Tips:可以先将输入的字符串全部转化为小写字母,然后再将元音字母变为大写,时间复杂度O(n) #include<stdio.h> #include<string.h> #in ...