课程名称:大话PHP设计模式
课程章节: 14-2MVC结构 14-3自动加载配置
课程链接
主讲老师:Rango
课程内容
讲解了MVC结构和自动加载配置的现实过程
课程收获
一、MVC结构
定义
模型-视图-控制器模式,也称为MVC模式(Model View Controller)。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
它把软件系统分为三个基本部分:
模型(Model):负责存储系统的中心数据。
视图(View):将信息显示给用户(可以定义多个视图)。
控制器(Controller):处理用户输入的信息。负责从视图读取数据,控制用户输入,并向模型发送数据,是应用程序中处理用户交互的部分。负责管理与用户交互交互控制。
目的
实现一种动态的程序设计,是后序对程序的修改和扩展简化,并且使程序某一部分的重复利用称为可能。
通过对复杂度的简化,使程序结构更加直观。
二、自动加载配置
实现原理
1、PHP中使用ArrayAccess实现配置文件的加载
2、在工厂方法中读取配置,生成可配置化的对象
3、使用装饰器模式是实现权限验证,模板渲染,JSON串化
4、使用观察者模式实现数据更新事件的一系列更新操作
5、使用代理模式实现数据库的主从自动切换
代码实现
class Config implements ArrayAccess
{
protected $path;
protected $configs = [];
function __construct($path)
{
$this->path = $path;
}
function offsetGet(mixed $offset): mixed
{
if (empty($this->configs[$offset]))
{
$file_path = $this->path.'/'.$offset.'.php';
$config = require $file_path;
$this->configs[$offset] = $config;
}
return $this->configs[$offset];
}
function offsetSet(mixed $offset, mixed $value): void
{
throw new Exception("cannpr write config file.");
}
function offsetExists(mixed $offset): bool
{
return isset($this->configs[$offset]);
}
function offsetUnset(mixed $offset): void
{
unset($this->configs[$offset]);
}
}
$config = new Config(__DIR__.'/configs');
var_dump($config['controller']);
\configs\controller.php
$config = [
'home' => [
'decorator' => ['Demo\decorator\Template']
]
];
return $config;