用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8205|回复: 10
收起左侧

[Others] CI扩展框架 climbPHP 首发

[复制链接]
发表于 2012-9-11 12:00:29 | 显示全部楼层 |阅读模式
本帖最后由 lamtin 于 2012-9-11 14:48 编辑

这不是一个cms,也没有图形界面,有的只是一些扩展的类库和解决方案。等你用了,你就会知道好。
github地址: https://github.com/sskyy/climbPHP  

climbPHP

这是codeIgniter的扩展框架,提供了 “更好的模块化” “广播系统” “实体系统” 这三个主要的扩展功能。

更好的模块化

我所指的模块是module,而不是model。model是业务模型,我们能用它进行一定的业务逻辑操作。而模块应该是系统的组成部分,应该实现三个主要特性: 1.能根据系统事件动态地做出响应。也就是在系统级别应用 “观察者模式” 。 2.能够使用系统统一的规则进行通信。climbPHP使用的是全局的广播。 3.能够根据一定的规则构建出优雅的层次结构。

climbPHP的解决方案:
1.对于 “1” “2” 两点来说。
climbPHP使用的是建立一个全局的事件对象。所有模块都可以通过这个事件对象进行 “抛出” 和 “监听” 。基础模块只需要在可能出现扩展的地方抛出合适的 “事件” 即可,除了自身逻辑以外不需要再知道其他模块的处理细节。这里注意,执行事件对象的“抛出”操作是可以得到返回值的,这个返回值代表着外界的响应。这使得在有必要的情况下外界可以在一定程度上干预模块内的操作。另外,全局事件也是一个模块。

2.要构建出优雅的模块层次结构,需要实现 3 个要点:
[1] “被依赖”的模块有能力知道“依赖”它的模块何时被加载。并有机会操作“依赖”的它的模块;
[2] 要能实现依赖关系的自动加载;
[3] 模块能动态的按需获取其他模块,同时要求这种获取方法是不能污染全局变量的。
climbPHP实现了一个模块加载器(也是一个模块),能根据模块申明的依赖关系进行自动加载。加载的过程中也实现底层模块获取上层模块的能力。屏蔽了CI的全局对象,所有资源统一交由模块管理器来管理。

广播系统

“广播系统”实际上就是通过“事件对象”实现的。任何模块既可以使用全局的事件对象,也可以在模块内实现自己的“事件对象”。

实体系统

实体系统 的核心是“实体”和“集合”两个类,除了基本的增删改查外,主要的特点有:
1.实体实现了嵌套,的属性也可以是另一个实体。“集合”实现了“排序”、“筛选”等功能。
2.实体和集合都通过组合的方式获取 “与数据库的连接” ,它只要求用户的数据库连接类实现了约定的接口。用户可以使用任何数据库,甚至混合使用。
3.对于mysql用户。climbPHP通过一个小型ORM和一个表数据入口类来帮助使用实体类,并且可动态拆卸


评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2012-9-11 12:30:27 | 显示全部楼层
嗯嗯,速度上传代码到github,嘿嘿
发表于 2012-9-11 12:34:17 | 显示全部楼层
期待,速度提交代码噢~
 楼主| 发表于 2012-9-11 12:43:47 | 显示全部楼层
代码已提交
发表于 2012-9-11 14:06:04 | 显示全部楼层
火速围观..............
发表于 2012-9-13 17:23:56 | 显示全部楼层
看上去好牛B
发表于 2012-9-24 15:24:21 | 显示全部楼层
很多专有名词完全不懂
发表于 2012-11-23 23:05:50 | 显示全部楼层
求讲稿
发表于 2013-12-8 10:45:23 | 显示全部楼层
看到那个ci第2次视频里楼主的介绍觉得挺好,就去下了个,正在看源码。然后决定公司是不是要用这个东西。我们的业务逻辑实在太复杂了。{:soso_e113:},感谢楼主的付出。
发表于 2013-12-8 12:10:44 | 显示全部楼层
代码还需打磨,目前似乎还些问题,注释太少了,有地方测试用的echo 好像还在没法直接用(还是我用的额不对了?)

本版积分规则