受到两位大佬的影响 @章亦春 @仁风,决定写一个简单的MVC源码,争取在年前写完分享给大家。
MVC 简介
MVC 是 Model-View-Controller 的简称,用一种业务逻辑、数据、页面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,与用户交互的页面可以不受业务逻辑限制,可随时更改和切换。
上图是一个 MVC 框架处理请求的流程,Controller 接收请求,并组织转发请求到 Model,Model 实现逻辑代码和数据交互,返回结果给 Controller,Controller 执行页面处理并返回结果给请求。
MVC 应该包含什么?
没有固定答案,但以下内容是我预计要实现的:
- 入口文件(如 index.php)用于接受请求,注册应用,定义常量等
- 自动加载
- 注册插件
- 自定义路由 分发请求
- 依赖注入 容器
- 配置服务
- 错误 日志服务
- ORM
- 视图引擎
- CLI 命令行工具
- 测试工具
- 认证验证服务
- ...
框架简介
我把要实现的框架命名为 origin
,希望各位带着初心出发 以后牛逼了别忘了 origin
。
架构设计
框架的大致结构,如图所示
关键模块
架构图的最顶部有三个模块,分别是
- 分发器
- 容器
- 盒子
分发器的作用是,进行全局管理,包括所有类的实例化操作,公共方法的定义等,容器和盒子是分发器的子类,它们的区别在于,容器中的实例可以重复利用,盒子中的实例每次会重新创建。
容器就是装东西的工具,比如 $instance = [1,'1'] 这个$instance 就是容器,当然里面还可以装载对象和闭包函数
准备工作
我们在工作目录下创建一个名为 origin
的文件夹作为框架名称。
$ mkdir origin
在 origin
中需要创建一系列目录用来存放应用代码和框架本身的代码
$ cd origin
$ mkdir app core public
$ cd app
$ mkdir controllers models views conf
创建好后目录结构为(使用 tree
命令)
origin
- app
- conf
- controllers
- models
- views
- public
- core
其中文件夹 app
用来存放所有与应用相关的代码,core
用来存放框架本身的代码,public
存放入口文件(如 index.php)和公共资源(如 JS,CSS)。
总结
本结主要介绍了 MVC 框架的概念和工作流程,以及一些开发规范和命名空间。创建了一个 origin
的目录作为框架名称,并在该目录下创建了一些目录用于框架代码和应用代码的隔离。
下期见
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。