这段时间终于有空了,所以来重构一下之前的框架。现在看原来的框架发现非常乱,毫无规范,看到脑壳疼。
进入正题,这次的重构主要更改如下:
- 文件夹首字母大写
- 整理核心类的目录结构,添加多了一个Bootstrap引导类来管理多个核心模块
- 将之前的全局变量$_GLOBALS全部去除,换为Core类当容器来保存
目录结构分析
之前项目的代码全部都是挤在Core目录下,而且Core就是核心代码根目录了。可以看这篇文章来对比传送门。现在首先是对核心根目录进行提取出来,这样子就能够扩展更多的功能代码出来,结构也更加清晰了。
流程结果图如下:
变化代码分析
Rice\Core\Core
这个类中的全局对象将$_GLOBALS
这个全局注册对象去除掉了,取代的是注入的形式。
/*
* 设置全局类
*/
static public function set($key, $item) {
if (!isset(self::$_map[$key])) {
self::$_map[$key] = $item;
}
return self::$_map[$key];
}
/*
* 提取全局类
*/
static public function get($key) {
if (isset(self::$_map[$key])) {
if (is_object(self::$_map[$key])) {
return self::$_map[$key];
} else if (is_string(self::$_map[$key])) {
$reflection = new \ReflectionClass(self::$_map[$key]);
$ins = $reflection->newInstanceArgs();
self::$_map[$key] = $ins;
return self::$_map[$key];
}
}
return null;
}
static public function seting(){
//配置类
self::set('Config','\Rice\Core\Config');
//模板变量
self::set('Cache','\Rice\Core\Cache');
//信息变量
self::set('Infos','\Rice\Core\Infos');
Core::get('Config');
}
这个类采用直接传命名空间的形式来对对象进行保存起来,这样子的做法相对于直接使用$_GLOBALS
好很多了,而且代码相对比较可控,添加全局对象直接使用set
函数就ok
啦。
使用这种方法之后,相对于在视图文件中的写法也更加的飘逸了。
以前写法
global $cache;
现在写法
$cache = \Rice\Core\Core::get('Cache');
哈哈,你们认为哪种更好呢?
在模板的使用上也更加人性化,减少代码量。
以前写法
$cache->getVal('test');
现在写法
$cache->test;
$cache->get('test');
添加多了一个对变量的支持,也将获取的函数简化,适应对于不同代码习惯的人们。
基本的修改也就是这些了,还有更多的细节可以参考代码。
之前的微信水果商城代码也会逐步对其更新,想了解的话请关注我的github。