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的扩展机制的更多相关文章

  1. Dubbo中SPI扩展机制解析

    dubbo的SPI机制类似与Java的SPI,Java的SPI会一次性的实例化所有扩展点的实现,有点显得浪费资源. dubbo的扩展机制可以方便的获取某一个想要的扩展实现,每个实现都有自己的name, ...

  2. Kubernetes 降本增效标准指南 | 基于K8s 扩展机制构建云上成本控制系统

    作者 王玉君,腾讯云后台高级开发工程师,负责腾讯云原生系统开发及建设. 晏子怡,腾讯云容器产品经理,在K8s弹性伸缩.资源管理领域有丰富的实战经验. 导语 Kubernetes 作为 IaaS 和 P ...

  3. Spring 的微内核与FactoryBean扩展机制--转载

    作者:江南白衣 原文地址: http://www.blogjava.net/calvin/archive/2005/08/30/11099.html http://www.blogjava.net/c ...

  4. SOFA 源码分析 — 扩展机制

    前言 我们在之前的文章中已经稍微了解过 SOFA 的扩展机制,我们也说过,一个好的框架,必然是易于扩展的.那么 SOFA 具体是怎么实现的呢? 一起来看看. 如何使用? 看官方的 demo: 1.定义 ...

  5. Redis扩展机制

    Redis扩展机制扫盲 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Redis的Avalibility解决方案有很多,比如Twemproxy,Codis, 一.Twempro ...

  6. Spring.factories扩展机制

    和Java SPI的扩展机制类似,Spring Boot采用了spring.factories的扩展机制,在很多spring的starter 包中都可以找到,通过在 META-INF/spring.f ...

  7. 聊聊spring的那些扩展机制

    1.背景 慎入:本文将会有大量代码出入. 在看一些框架源码的时候,可以看见他们很多都会和Spring去做结合.举个例子dubbo的配置: 很多人其实配置了也就配置了,没有去过多的思考:为什么这么配置s ...

  8. 从ExtensionLoader理解Dubbo扩展机制

    Dubbo的扩展机制是怎么实现的?最简单的回答就是@SPI. Dubbo的插件化思路来源于Java SPI.   JAVA SPI 机制     SPI的全名为Service Provider Int ...

  9. atitit.编程语言 类与对象的 扩展机制.doc

    atitit.编程语言 类与对象的 扩展机制.doc 1.1. Java 下一代: 没有继承性的扩展1 1.2. 继承1 1.3. 使用cglib动态为Java类添加方法1 1.4. 工具类 1 1. ...

随机推荐

  1. c++STL之sort排序

    排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序.                                                                ...

  2. 设计模式之桥接模式(Bridge)--结构模型

    1.意图 将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.适用性 你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 类的抽象与它的实现都应该可以通过子类的方式加以扩展. 抽象部分与实现 ...

  3. mysql 的replace 和replace in to

    1.  mysql 的replace  批量替换 update candidate set education = replace(education,'科','学') where education ...

  4. 配置managed server

    managed server往往是部署应用程序的server,所以最好在weblgoic上配置上managed server,不要把应用程序直接部署到admin server上. 一.受管服务器的创建 ...

  5. 【搜索引擎Jediael开发4】V0.01完整代码

    截止目前,已完成如下功能: 1.指定某个地址,使用HttpClient下载该网页至本地文件 2.使用HtmlParser解释第1步下载的网页,抽取其中包含的链接信息 3.下载第2步的所有链接指向的网页 ...

  6. 第一章——Activity的生命周期

    问题总结: 1.Activity完整的生命周期 2.当打开第二个Activity并关闭时候的生命周期. ①.解释为什么onPause()方法不要有耗时操作 3.Activity发生异常重启的时候问题: ...

  7. SQL Server数据库空间管理 (1)

    数据库经常遇到的问题: 1).数据库文件空间用尽  2).日志文件不停增长 3).数据库文件无法收缩  4).自动增长和自动收缩 本系列就以上面的4个问题入手分析并总结数据库空间的管理方法.   1. ...

  8. Hadoop伪分布式搭建步骤

    说明: 搭建环境是VMware10下用的是Linux CENTOS 32位,Hadoop:hadoop-2.4.1  JAVA :jdk7 32位:本文是本人在网络上收集的HADOOP系列视频所附带的 ...

  9. 解决function.bind()方法

    这个 bind 方法只有在 ie10 版本的浏览器才得到原生支持,低于该版本的浏览器下执行时会得到一个 undefined 的错误提示. 于是只好再次上网 google 解决方案,功夫不负有心人,我们 ...

  10. opencv菜鸟学习之旅cvNorm

    Norm 计算数组的绝对范数, 绝对差分范数或者相对差分范数 double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_ty ...