CoreMVC的框架结构
┌────┐ ┌────┐
┌┤设计模块├──┤开发模块├┐
│└────┘ └────┘│
│ │
└─────重构模块─────┘
设计模块:将需求转化为模块,模块之间保持低耦合度,确定模块要实现的功能。
开发模块:在模块内实现所需的功能,保持功能之间的逻辑关系,厘清模块之间的调用关系。
重构模块:根据需求和用途继续优化模块结构,以达到重用和扩展效果,并提高运行效率。
● 模块的设计原则
需求用途:根据需求和用途分成几个独立的模块。
耦合程度:模块和模块之间的耦合度尽可能疏松。
重用程度:重用度高的部份可以设计成单独模块。
模块大小:大小适宜同时兼顾开发运行管理效率。
● 模块的开发原则
易于设计:模块之间能体现泛化、包含、扩展的关系。
易于开发:尽量用PHP内部函数,减少模块间的调用。
易于测试:代码符合使用单元测试的功能。
易于部署:模块可以很方便的组合,可快速部署和部署多个。
文件三类型:模块 配置 模板───┐
(MCT) Module Config Template │
│ │
├───┬───┐ │
│ │ │ │
模块三段式:导入 定义 执行 │
(IDE) Import Define Execute │
│ │
┌───┼───┐ │
│ │ │ │
框架三步曲:模型 视图 控制 │
(MVC) Model View Controler │
│ │
└────────┘
〖模块的分类和关系〗
┌──────┐ ┌────┐
│ 应用模块 ├─┤ │
│┌────┐│ │独立模块│
││核心模块├┼─┤ │
│└────┘│ └────┘
└──────┘
● 应用模块:直接针对业务应用的模块,在CoreMVC里通常继承核心模块后使用。
● 核心模块:用于建立核心框架的模块,在CoreMVC里核心模块可以继承后扩展。
● 独立模块:常用类库相对独立的模块,在CoreMVC里可被应用或核心模块调用。
┌──────┐
│ 应用模块 │
│┌────┐│ ┌────┐
││访问模块├┼─┤用户访问│
│└────┘│ └────┘
│┌────┐│ ┌────┐
││引用模块├┼─┤其他模块│
│└────┘│ └────┘
└──────┘
● 应用模块:CoreMVC的应用模块把访问模块和引用模块合二为一了,既支持用户直接访问,也支持其他模块导入调用。
● 访问模块:用户直接通过浏览器或命令行访问模块,其他框架一般把这部份做成Controller。
● 引用模块:其他模块导入该模块并调用其方法属性,其他框架一般把这部份做成Model。
〖各种配置文件〗
● httpd.conf:Apache配置文件,使用SetEnv设置环境变量。其他的IIS和Nginx也可以通过设置环境变量来配置。
● .htaccess:在Apache下可以使用此文件进行URL重写和使用SetEnv设置环境变量。在未找到core_config环境变量时,
其他的IIS和Nginx也会默认读取当前的此文件作为配置。该方法适合模块访问的方式。
● config.php:使用PHP返回配置数组值来配置,该方法适合单入口方式,因为需要主动载入。
● config.ini:使用ini形式的配置文件来配置,该方法适合单入口方式,因为需要主动载入。
● index.php:直接在单入口程序里写配置,该方法不适合在不同环境下部署的场合。
● core.php:直接修改核心文件来配置,该方法不适合需要更新核心模块的场合。
以上是CoreMVC模块标准的三段式写法,使用这样的写法可以保证使用模块方式访问和使用单入口方式访问都无需修改模块程序。
以上是CoreMVC单入口程序的标准写法,该写法使用配置文件的方式,而单入口程序不会经常修改。
以上是CoreMVC模块方法是否能被直接访问,和配置相关。
CoreMVC的目录风格
目录结构:
[module].php 独立模块
[module]\ 模块目录(可省略)
模块程序秉承CoreMVC思想或由核心文件直接修改而成,通常这是为了方便作为独立模块使用,更可将模块目录中的配置和模板也一并写到模块程序里去从而省掉模块目录。
目录结构:
core.php 核心模块
[module].php 模块程序
[module]\ 模块目录(可省略)
模块程序是标准的三段式结构:导入、定义、执行。用户直接访问的是模块文件,在核心文件里直接写配置参数。
目录结构:
core.php 核心模块
.htaccess Apache配置文件
[module].php 模块程序
[module]\ 模块目录(可省略)
模块程序是标准的三段式结构:导入、定义、执行。用户直接访问的是模块文件,核心文件不变,在Apache配置文件里写配置参数。
目录结构:
core.php 核心模块
config.php 配置文件
[module].php 模块程序
[module]\ 模块目录(可省略)
模块程序是标准的三段式结构:导入、定义、执行。用户直接访问的是模块文件,在核心文件里写配置文件所在的位置,在配置文件里写配置。
目录结构:
core.php 核心模块
config.php 配置文件
.htaccess Apache配置文件
[module].php 模块程序
[module]\ 模块目录(可省略)
模块程序是标准的三段式结构:导入、定义、执行。用户直接访问的是模块文件,核心文件不变,在Apache配置文件里写配置文件位置,在配置文件里写配置。
目录结构:
index.php 入口程序
core.php 核心模块
config.php 配置文件(可省略)
modules\[module].php 模块文件
templates\[module]\ 模板目录(可省略)
configs\[module]\ 配置目录(可省略)
首页文件作为单入口可兼职配置文件或导入另外的配置文件。核心文件不需要修改。此时模块程序只需保留三段式中的“定义”部份即可。
目录结构:
index.php 入口程序
define.php 配置文件
core.php 核心模块
modules\[module].php 模块文件
templates\[module]\ 模板目录(可省略)
configs\[module]\ 配置目录(可省略)
首页文件作为单入口程序和一般配置,而配置文件里仅定义和环境有关的参数。核心文件不需要修改。此时模块程序只需保留三段式中的“定义”部份即可。
目录结构:
core.php 核心模块
config.php 配置文件(可省略)
.htaccess Apache配置文件
modules\[module].php 模块文件
templates\[module]\ 模板目录(可省略)
configs\[module]\ 配置目录(可省略)
Apache配置文件写重定向到核心程序,在核心文件或Apache配置文件里写配置或写配置文件所在的位置。此时模块程序只需保留三段式中的“定义”部份即可。
目录结构:
index.php 核心模块
config.php 配置文件(可省略)
modules\[module].php 模块文件
templates\[module]\ 模板目录(可省略)
configs\[module]\ 配置目录(可省略)
将核心模块改名为首页名称,在核心文件里直接写配置或写配置文件所在的位置。此时模块程序只需保留三段式中的“定义”部份即可。
<?php
class core {
/*
* 控制方法(静态调用)
*/
public static function init() {} // 初始化函数(可继承)
public static function stub() {} // 存根函数(可继承)
public static function main() {} // 入口函数(可继承)
public static function path() {} // 路径函数
/*
* 视图方法(静态调用)
*/
public static function view() {} // 视图函数(可继承)
/*
* 模型方法
*/
// 第一组(静态调用)
public static function connect() {} // 数据库连接
public static function execute() {} // 执行SQL语句
public static function prepare() {} // 准备SQL语句
public static function sequence() {} // 生成自增序列(可继承)
// 第二组(静态调用)
public static function structs() {} // 静态构造函数(可继承)
public static function selects() {} // 静态选择函数(可继承)
public static function inserts() {} // 静态插入函数(可继承)
public static function updates() {} // 静态修改函数(可继承)
public static function deletes() {} // 静态删除函数(可继承)
public static function replaces() {} // 静态更新函数(可继承)
// 第三组(实例调用)
public function struct() {} // 实例构造函数(可继承)
public function select() {} // 实例选择函数(可继承)
public function insert() {} // 实例插入函数(可继承)
public function update() {} // 实例修改函数(可继承)
public function delete() {} // 实例删除函数(可继承)
public function replace() {} // 实例更新函数(可继承)
}
?>
- core.php
- 改动
- 改文件名
- 改类名 —— 独立模块
- 不改类名 —— 显式入口程序
- 不改文件名
- 改方法 —— 固定扩充核心模块
- 改配置 —— 隐式入口程序、免配置文件
- 不改动
- 桥接
- 继承 —— 灵活扩充核心模块
- 导入 —— 配置文件
- 直接