剛剛程式改來改去的結果,終於初步把認證系統的unit testing完成了。可喜可賀啊!
我對這個版本的認證系統比之前的班網滿意太多了。現在寫的認證系統基本上是把問題reduce到「某個使用者有沒有某個符號」,資料表只需要兩張,一張是使用者帳號密碼和流水號。另外一張就是符號表,每個符號表只需要三個欄位,流水號一個,符號名稱一個(ex:課表修改權),另外一個欄位就是用符號分割的使用者流水號表(如1#2#3代表流水號為1、2、3的人和這個符號「相應」)。
模式是很簡單,可是之前班網有很多問題都可以很簡單的用這個模式解決。比如「等待認證的使用者」。過去是另外建立一張資料表,然後裡面存滿等待認證的使用者。然後認證通過就從表中刪除使用者,然後把使用者加入另外一張表中。現在這個系統只需要建立名為「等待認證中」的符號然後把使用者流水號塞進去就可以了,認證通過則反向行之。要測試這個使用者是不是等待認證中也只要呼叫測試函式即可。
自己回顧一下,系統的整體架構也比過去進步多多,用OO重寫真的乾淨了不少,和MySQL連接的部份、權限測試,登入測試現在全部都是物件。以MySQL來說,過去常常出現的
$action="select * from table_name where id=2;";
$result=mysql_query($action,$link);
while(mysql_fetch_array(...
...
現在替換成
$aray=array(
id=>2
);
//帥氣的高階封裝
$result_array=$sql->SelectAllFromTable($aray);
使用起來方便很多,出錯的機率降低(比如不必再煩惱SQL query忘記打分號了XD),方便做小動作(如強迫所有的query都經過escape),除錯也簡單(寫個script做unit testing即可XD,而且只要物件沒錯通常整個就沒錯XDDD)。
認證物件當然也用了SQL物件,認證的介面也變得很簡單:
//如果smallt可以改課表則傳回true
$auth->UserNameHasAuth("smallt","改課表");
//給smallt管理的權限
$auth->AddAuthToUserNAme("smallt","管理");
比較起來,從前使用者管理的部份根本就是一團漿糊,一大堆奇怪的指令穿插在中間根本不知道幹嘛用orz。放了一個學期以後突然出問題,明明就是我寫的code,可是我真的完全不知道怎麼改囧rz。
現階段有在考慮把code全部打上註解。然後希望未來可以把design pattern的書讀完。
全文連結