的架构都有自己的特色,但从总体架构上看,其模型都大同小异。
基于插件设计的应用程序由应用程序框架、插件接口、插件和公共函数库四部分组成。
应用程序框架负责应用程序的整体运作,它清楚程序整个流程,但并不知道每个过程具体要做什么。它在适当的时候调用一些插件,来完成真正的功能。
插件接口是一个协议。插件按照这个协议实现出来,就可以加入到应用程序中来。当然,对于复杂的系统,插件接口可能有多个,各自具有独立的功能。
插件是完成实际功能的实体,实现了要求的插件接口。尽管实现什么以及怎么实现,完全是插件自己的自由。在实际情况来,一般还是有些限制,因为插件接口本身可能就是一个限制。如,实现编译功能的插件,自然不能实现成一个聊天功能的插件。
公共函数库是一组函数或者类,应用程序框架和插件都可以调用。它通常是一个独立的库。应用程序框架本身是公用的,是代码复用的一种方式。但并不是所有可复用代码都可以放在框架中,特别是插件会用到的公共代码,那会造成插件对框架的依赖。把这些公共代码提取到一个独立的库中,是一种好的方法。
3.3 开发设计模型的改进
基于我对MVC模型的一点看法,插件式设计能因应我以上的考虑,为系统设计找到一个平衡点,它能把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。公开插件接口,让第三方有机会扩展应用程序的功能,共同分享成果。
为更好地体现出系统的灵活性和可扩展性,本系统采用了MVC三层模式开发和插件设计的混合开发模式,实现表现层和业务层的分离,加上事件处理(Action)和过滤器(Filter)处理的机制,在系统适当的地方,放置相关的钩子(Hook),即插件接口,来运行用户扩展的功能插件,如在数据库存取数据时,进行格式化数据。
21
3.3.1 系统整体模式架构
CI控制器 MVC 模型 (前台控制器, 后台控制器) CI模型 (业务辅助函数、 业务处理模型、 Init_model) CI视图 (模板标签) 数据库 客户 插件接口 (Hooks) 插件1 插件2 插件3 公共函数库 (辅助函数、格式化函数等) 插件式设计 图表 3-2混合式开发模型图
3.3.2 插件式开发架构 系统提供通用插件接口:
init:
位置:初始化模型Init_model
说明:系统函数库或类库装载完毕,准备初始化插件,通常在插件被加载时调用。 shutdown:
22
位置:系统扩展钩子Generate系统关闭,让插件停止。
至于插件要完成什么功能,要插到哪里,在执行init后决定,它调用
公共函数库里的函数把自己注册到系统中某个位置。 专用插件接口:
这些插件接口是专用的,看到它的接口函数说明,你就可以大致了解它的功能了。如edit_post、delete_post。
3.4 模块结构
3.4.1 标签模块(helpers/template-tags)
标签模块用于前台视图的内容显示,包括六类标签库,每类模板标签的具体职责为:
1. General_tags:包括导入页头、页尾和边栏模板,显示博客基本信息和登陆
和登出链接等
2. Post_tags:包括显示和获取当前文章的标题、内容、ID、摘要等信息; 3. Comment_tags:包括显示和获取当前评论的各字段内容;
4. Category_tags:包括显示和获取当前文章的分类信息、列出分类列表等; 5. Author_tags:包括显示和获取当前文章作者的基本信息; 6. Link_tags:生成不同链接供导航浏览
3.4.2 业务模块 业务辅助函数库:
1 helpers目录下的为数据的获取、处理及输出
1. Helper/post_helper.php 2. Helper/comment_helper.php 3. Helper/category_helper.php
2 Helpers/admin目录下的为相关数据库的数据跟新、删除和添加操作
23
1. Helper/admin/comment_helper.php 2. Helper/admin/category_helper.php 3. Helper/admin/post_helper.php 4. Helper/admin/user_helper.php
业务类:
1. models/Post_model:系统的主查询类 2. models/User_model:用户信息的查询及跟新 3. libraries/Option:系统设置信息的类及辅助函数
3.4.3 控制模块(controllers目录下)
控制器模块主要分为前台控制器(GeneralController)、后台控制器(admin/PrivilegedController),还有安装控制器(setup/VXblog),扩展钩子(setup/Setup、Generate)。
3.4.3.1 前台控制模块GeneralController 目录位置:controllers/
每个前台控制器子类均对应不同的浏览方式,或操作(Comment对应浏览者的发布评论操作,Postpass进行对密码保护的文章验证操作)
24
相关推荐: