好吧,因為組織需要,最近又開始轉戰php了,業務邏輯都還好說,主要是老大要求在資料訪問層上加上登入態驗證。
其實這種要求也是合理的,網際網路服務要求上層保護下層,但下層不能完全相信上層。但是問題也就來了,有如下兩種方案:
1.寫乙個mysql proxy server,用來將呼叫方發來的請求拼裝,然後返回給呼叫側。這樣做的主要難度在於:
a)sql語句的拼裝及序列化
b)資料集序列化,雖然有不少這方面的產品,但是終究還是太過複雜,而且沒有時間折騰
果斷放棄。
2.封裝一層mysql的api,呼叫方直接在本地呼叫即可。這樣的話,只需要考慮sql語句的拼裝即可。現在就有很多選擇啦,
a)使用類似django裡面model的模型類
b)使用ci中的active record
雖然說model的方式,對資料層的遮蔽較好,但是小組成員普遍認為這種方式過重,輕量的一點的話,最終還是選擇了codeigniter中的ar。
ok,那麼現在,考驗ci模組拆分的好不好的時候到啦!
具體中間的種種辛苦就不說啦,直說我最終的實現把,拷貝system\database到乙個單獨的目錄,x:/php/ 。
建立乙個檔案myconfig.php:
<?php
define('basepath', dirname(__file__).'/');
define('ext', '.php');
require_once(basepath . 'database/db' . ext);
function &instantiate_class(&$class_object)
function log_message($level = 'error', $message, $php_error = false)
function mydb()
?>
建立乙個測試檔案test.php:
<?php
require_once('myconfig.php');
$db = mydb();
$db->select('id,user_login,user_email');
$query = $db->get('wp_users');
echo "\n";
foreach ($query->result() as $row)
?>
輸入結果如下:
database driver class initialized
1 admin
zny2008@gmail.com
ok啦~~~ 這樣我們如果要在資料訪問前需要做許可權校驗的話,只需要在mydb函式中做判斷即可。
另外,不得不說ci模組拆分的確實不錯,instantiate_class是來自於它的system\codeigniter\common.php。 log_message我給重寫了一下,因為對於每個呼叫者來說,希望寫log的方式是不一樣的。(比如我這次就直接列印在了螢幕上。。。。),最近正好 在看設計模式,這種方式也是符合模版方法模式的。
作者「wolf的個人空間」
抽離樣式模組
各個瀏覽器之間樣式相容性不同,預設的樣式值有所不同,如果沒有初始化對應的css,那麼最終執行的專案會在不同瀏覽器之間的表現有所不同,所以會對專案中標籤進行初始化設定 最常見的就是設定萬用字元 缺點是會遍歷所有的標籤屬性,嚴重影響效能 可以對具體標籤具體設定 body,h1,h2,h3,h4,h5,h...
python tornado 專案框架抽離
1,主函式入口 venv bin python3 全域性變數字典 tornado.options.define global dict type dict,default multiple true tornado.options.parse command line server.bind 888...
抽離止損 做自己
兩性關係學習心得 無論你多麼愛乙個人,也不能放棄做自己,當你放棄做自己的那一刻,你已經不特別了。兩個人從陌生到熟悉,再到最好在一起,並不是一成不變的,而是肯定會變的,當你們從朋友變成情侶的那一刻,你就應該明白,你要不斷的變成更好的自己,而不是說你已經吃定他了。很多女孩子便是如此,被男孩子追的時候,很...