logo资料库

PHP bingo开发 详细文档.pdf

第1页 / 共95页
第2页 / 共95页
第3页 / 共95页
第4页 / 共95页
第5页 / 共95页
第6页 / 共95页
第7页 / 共95页
第8页 / 共95页
资料共95页,剩余部分请下载后查看
bingo 手册 1.背景................................................................................................................................................... 4 2.名词解释........................................................................................................................................... 5 3.设计目标........................................................................................................................................... 9 3.1 核心框架 .......................................................................................................................................9 3.1.1 组件化,可扩展,可配置 ............................................................................................................. 9 3.1.2 支持 Event & Hook 处理...................................................................................................... 10 3.1.3 支持错误/异常的统一处理 .................................................................................................... 10 3.2 框架组件 .....................................................................................................................................11 3.2.1 ActionController 组件 ...............................................................................................................11 3.2.2 ActionChain 组件 ......................................................................................................................11 3.3 其他 .............................................................................................................................................11 3.3.1 autoload 加速 ............................................................................................................................11 3.4 性能目标 .....................................................................................................................................13 4. 总体设计....................................................................................................................................... 14 4.1 应用逻辑总体架构图 ..................................................................................................................14 4.2 framework UML 类图 .................................................................................................................20 4.3 总体流程图 .................................................................................................................................22 4.4 目录组织 .....................................................................................................................................25 5. 详细设计....................................................................................................................................... 30 5.1 框架核心类 .................................................................................................................................30 5.1.1 Action........................................................................................................................................ 30 5.1.2 Context...................................................................................................................................... 35 5.1.3 Event......................................................................................................................................... 56 5.1.4 Error.......................................................................................................................................... 59 5.2 框架组件 .....................................................................................................................................63 5.2.1 ActionController ....................................................................................................................... 63 5.2.2 ActionChain .............................................................................................................................. 67 6.使用接口......................................................................................................................................... 74 6.1 Context .........................................................................................................................................75 6.1.1 getInstance() ............................................................................................................................. 75 6.1.2 callAction() ............................................................................................................................... 79 6.1.3 getAction()................................................................................................................................ 80 6.1.4 addEventHook()........................................................................................................................ 80 6.1.5 fireEvent()................................................................................................................................. 81 6.1.6 fireError().................................................................................................................................. 82 6.1.7 getProperty() ............................................................................................................................. 83 6.1.8 setProperty() ............................................................................................................................. 83 6.1.9 modifyProperty() ...................................................................................................................... 83 6.1.10 addDenyActionID() ................................................................................................................ 84 6.1.11 removeDenyActionID() .......................................................................................................... 85 6.1.12 getAllStack()........................................................................................................................... 85
6.1.13 printAllStack() ........................................................................................................................ 86 6.1.14 getActionExecedStack() ......................................................................................................... 86 6.1.15 getDebugInfo() ....................................................................................................................... 87 6.1.16 getActionStack() ..................................................................................................................... 87 6.1.17 getCurrentAction().................................................................................................................. 89 6.1.18 getCurrentActionParent() ....................................................................................................... 89 6.1.19 lastError .................................................................................................................................. 90 6.1.20 lastFailedAction...................................................................................................................... 91 6.1.21 rootAction............................................................................................................................... 91 6.2 Action ...........................................................................................................................................93 6.2.1 actionID .................................................................................................................................... 93 6.3 Event.............................................................................................................................................94 6.3.1 name.......................................................................................................................................... 94 6.3.2 source........................................................................................................................................ 94 6.3.3 object ........................................................................................................................................ 94 6.4 Error .............................................................................................................................................95 6.4.1 errno.......................................................................................................................................... 95 6.4.2 error .......................................................................................................................................... 95 6.5 ActionController...........................................................................................................................96 6.6 ActionChain..................................................................................................................................97 6.6.1 addAction() ............................................................................................................................... 97 6.6.2 addActionByIndex() ................................................................................................................. 98 6.6.3 removeActionByID()................................................................................................................ 99 6.6.4 removeActionByIndex()........................................................................................................... 99 6.6.5 getActionsCount() .................................................................................................................... 99 6.6.6 getActions() ............................................................................................................................ 100 6.6.7 setActions()............................................................................................................................. 101 6.7 logger..........................................................................................................................................101 7.配置............................................................................................................................................... 102 7.1 GlobalConfig.class.php ..............................................................................................................102 7.1.1 frameworkLog ........................................................................................................................ 102 7.1.2 isDebug................................................................................................................................... 103 7.1.3 switch...................................................................................................................................... 103 7.2 HooksConfig.class.php...............................................................................................................106 7.3 ActionController.class.php .........................................................................................................109 7.4 ActionChain.class.php ................................................................................................................110 7.5 AutoLoadConfig.class.php .........................................................................................................113 8. 部署修改..................................................................................................................................... 114 9. 库................................................................................................................................................. 116 9.1 数据库封装 ................................................................................................................................116 9.2 log 封装......................................................................................................................................118 10.规范............................................................................................................................................. 119 10.1 bingo 使用规范....................................................................................................................119 10.2 PHP 编码规范..........................................................................................................................119 10.3 SQL 规范 ..............................................................................................................................119 10.4 日志规范 ..................................................................................................................................120 10.5 日志报警形式规范 .................................................................................................................120 10.6 分机房配置规范 .....................................................................................................................120 10.7 公共库规范 .............................................................................................................................120 11. 讨论记录................................................................................................................................... 121
1.背景背景背景背景 bingo 是一个轻量级的 PHP 框架, bingo 的目标是为 PHP + MySQL 的中小型应用提供一 套快速开发的应用框架.常见的 PHP Web 开发框架如 PHPCake,Symfony 等显得太重量级, 框 架本身的性能,可维护性等方面都是一个问题, 并且很多规范并没有在框架中体现,基于这样 一个背景,我们考虑实现一个轻量级,可扩展性较强的 PHP 应用框架,并将 PHP Web 开发中的 规范,约定等问题一起处理. 2.名词解释 名词解释 名词解释 名词解释 bingo : PHP 框架的名称 http://bk.baidu.com/view/16957.htm hook : 俗称”钩子”, 当某些 event(事件)发生时,framework 触发某些 Hook 处理这些 event(事件), application 可用 hook 实现一些灵活和可扩展性较强的机制. event : 事件, 这些事件通常由 framework/application 产生, application 可以对事件设置 hook 函数, 这样就可以捕获相应的事件并执行 hook 函数. action : 片场中经常使用的术语, 意思是”开拍了”,在 bingo 中代表某一个具体操作, 熟悉 Structs
的同学可以将它理解为 Structs 中的 Action, 但它们并非完全一样, bingo 中的组件 (ActionController, ActionChain 等)也是用继承 Action 来实现的.application 中的页面控制逻辑 ActionUI(即大家熟悉的 UI)通常继承 Action. index.php : bingo 中所有外部请求的入口, 部署在 webserver 的 webroot 下面, 它是唯一一个存在于 web 目录下面的 php 文件.所有的动态请求都被 web server rewrite 到 index.php 统一处理. dictionary : 字典, 用来存放数据, 用字典来做数据存放的主要目的就是灵活,方便. error : 在 bingo 中, error 也可被当做 event 来触发, 当发生了某些 error 时, application 触发 error, framework 会调用相应的 error hook 进行处理,实现对 error 的统一处理. context : 名字的意思代表”上下文”, 但它更重要的作用是作为开发人员使用 framework 的唯一接 口,对外屏蔽内部设计,实现包装. ActionUI: 页面控制流程(UI), 主要负责从逻辑层/数据字典取出相应的数据并进行页面展示, 在 bingo 的开发规范中,推荐 application 将所有这类的 UI 全部放到 app/ui/module 下面, ActionUI
相对于 model,lib 等的重用度最低, 变化最频繁, 需要单独提出来.具体实现中 ActionUI 通常 继承 Action.ActionUI 不是一个具体的类,而是泛指 application 自己实现的 UI 相关的 Action, 这些 UI 相关的 Action 继承 Action 类并实现页面的渲染,这里将这些 UI 相关的 Action 统称 为 ActionUI. logic_flow: 业务逻辑流程, 通常的 MVC 中的 Model 不仅包含业务模型,还包含对业务模型的基本操 作(CRUD + 基本功能单元操作),同时包括用这些模型的各种单元操作组合而成的复杂的逻辑 流程.在 bingo 的开发规范中,推荐将由基本模型的单元操作组成的逻辑流程单独提取出来,作 为位于 ActionUI 和 logic_model 之间的一层, logic_flow 的重用性介于 ActionUI 和 logic_model 之间,层次性划分有利于逻辑的重用,维护和扩展. logic_model: 基本业务模型, logic_model 包含业务模型的定义和对模型的基本单元操作, logic_model 是对逻辑上的 model 的一种抽象,和数据存储没有直接关系(即与数据库中的表没有直接的关 系, 逻辑上的 model 可能对应 1 张表或多张表, 逻辑和存储是分离的).同样, logic_model 和之 前的 logic_flow 没有直接关系, logic_model 关心的是站在现实 model 的角度上看,有哪些基本 的单元操作, 与具体的逻辑流程无关(逻辑流程依赖于 logic_model 实现的基本单元操 作).logic_model 位于业务流程的最下端,与存储打交道, 也是业务逻辑中重用性最高的部分.
3.设计目标 设计目标 设计目标 设计目标 3.1 核心框架 核心框架 核心框架核心框架 3.1.1 组件化组件化组件化组件化,可扩展可扩展可扩展可扩展,可配置可配置可配置可配置 bingo framework 除了 kernel 以外,所有具体的功能都是基于组件的,实现 MVC 模式需要 的 ActionController 就是 framework 的组件之一,ActionController 并非是写在核心框架中的,我 们可以用 ActionChain 等其他组件替代它,这样基于 bingo framework 的 application 就变成基 于动作链模式的应用,或者多个组件混合使用.这种基于组件的方式使 framework 具备较强的 可扩展性,而不是固定为某一种模式,如传统的 Structs,Webwork 等,在 bingo 中可 用多个组件来实现和它们一样的应用开发模式.在 framework 中,组件是可配置的, 正如我们 可以选择哪种组件来实现我们的模式一样,同时,组件本身也是可配置的,不仅 framework 可以 调用组件,组件也可以调用组件,而这种调用关系也都是可以配置的,这样我们可以通过修改配 置来组合各种基本功能单元,避免了以前修改顺序执行的大逻辑时牵扯过多代码的问题,将修 改代码变为修改基本功能单元的配置关系是 bingo framework 需要达到的目标. 3.1.2 支持支持支持支持 Event & Hook 处理处理处理处理 Event & Hook 是一种非常灵活的机制.以前如果要对某些地方的代码增加新的功能,例如: 发帖成功后我们需要给用户加分,按照以前的方式需要修改原来发帖成功部分的代码,增加用 户加分相关方法的调用,而如果利用 Event & Hook 机制, application 只需要在这些可能扩展 的关键点上触发相应的事件,application 扩展某些需求时可以捕获相应的事件完成功能的扩 展.framework 组件的可配置 + framework Event & Hook 能够使 application 具
备较强的可扩展性,并实现从修改原有代码到增加独立代码和修改配置的转变.同时, framework 在 framework 内部处理的一些关键点上也设置有 Hook,如:当一次请求前/后的 Hook,当一个特定 Action 执行前/后的 Hook 等, 组件/application 也可设计自己的 Hook,如 ActionChain 组件就设计了当一个 Action 执行失败的 Hook. Event & Hook 是事件触发者和事 件捕获者之间的一种约定,通过监听者模式实现. 支持错误/异常的统一处理 3.1.3 支持错误 异常的统一处理 支持错误支持错误 异常的统一处理 异常的统一处理 application 中错误/异常通常需要做统一的处理, 例如:发生 001 错误时转错误页,发生 002 错误时转登录页,以前的应用代码通常在多处包含 001/002 错误的处理,当相关方法发生改 变时(例如处理方法类型,参数等),不得不在所有地方进行修改,这样的后果是恐怖的. bingo framework 支持错误/异常的统一处理,发生错误/异常时,application 只需触发相应的错误 号事件,framework 会自动调用配置的错误处理函数进行统一处理,这个便是上面介绍的 Event&Hook,在 bingo 中,错误发生后的触发实际和事件触发是一样的.统一的错误/异常处理简 化了错误处理及修改的代价. 3.2 框架组件 框架组件 框架组件框架组件 3.2.1 ActionController 组件组件组件组件 ActionController 控制器组件是用来实现 MVC 中 C 的一个组件.它继承 Action,根据页面 访问的 URI 来进行控制转发,URL 规则为 Perl 正则表达式,转发对象可以为 ActionChain, ActionController,ActionUI 等任意 Action,即 ActionController 支持多级分发,如果应用需要实现 为 MVC 模式,通常将 ActionController 设置为 framework 的 RootAction. ActionController 的 URLMapping 通过配置实现,在极端的情况下,甚至可以在将所有逻辑配置(包括
ActionChain,ActionFilter, ActionUI 等)全部在 URLMapping 中配置完成. 3.2.2 ActionChain 组件组件组件组件 ActionChain 动作链组件用来将一系列的 Action 顺序执行,任意一个 Action 执行失败 都 会导致整个 ActionChain 执行终止.ActionChain 中的 Action 可以是任意 Action(包括 ActionController, ActionChain, ActionUI 等),即 ActionChain 同样支持多级及嵌套,在 ActionChain 的执行过程中同时支持动态对 ActionChain 进行 add/remove,setActions 等修改,实 现比顺序更复杂的控制流程. 3.3 其他其他其他其他 3.3.1 autoload 加速加速加速加速 Bingo 大量使用了类,包括配置、库等全部用类形式提供,为了简化类加载,Bingo 采用 了 autoload 机制,同时为了不影响性能,内置了两种可配的加速模式。 autoload 加速的原理是为类建立(类名=>文件名)映射关系的缓存文件(称为 autoload cache),这样在加载类时就不需要搜索目录了。 Bingo 共有三种 autoload 机制: 1、普通模式; 2、加速模式; 3、极限加速模式(简称“极限模式”) 此时,必须保证类文件的命名符合规范,且类文件位于 include_path 中。 加速模式下,Bingo 会扫描所有 include_path,查找名为“xxx.class.php”的文件,并且 可见,对于用户来说,加速模式仅仅是更加快速的普通模式,除此之外他们的行为上 普通模式下,Bingo 只是简单的执行“require_once ClassName.class.php”,这意味着每 普通模式: 次都会扫描 include_path。 加速模式: 为这些文件建立(xxx=>文件路径)的 autoload cache。该查找过程不会递归子目录。 没有不同。; 极限加速模式: 中配置的目录,查找后缀为“.php”或者“.inc”的文件,并使用正则匹配从中查找类或者接口定 极限加速模式下,Bingo 会递归扫描 AutoLoadConfig::$AUTOLOAD_PATH_CONFIG
分享到:
收藏