這段時間終于有空了,是以來重構一下之前的架構。現在看原來的架構發現非常亂,毫無規範,看到腦殼疼。
進入正題,這次的重構主要更改如下:
- 檔案夾首字母大寫
- 整理核心類的目錄結構,添加多了一個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->getVal('test');
現在寫法
$cache->test;
$cache->get('test');
添加多了一個對變量的支援,也将擷取的函數簡化,适應對于不同代碼習慣的人們。
基本的修改也就是這些了,還有更多的細節可以參考代碼。
github https://github.com/dmf-code/Rice
之前的微信水果商城代碼也會逐漸對其更新,想了解的話請關注我的github。