Re: [請益] 為什麼要把所有功能寫在同一頁

看板PHP作者 (寶貝豬)時間16年前 (2010/01/24 11:42), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串3/3 (看更多)
恕略過原文, 我試著舉一個例子來說明基於維護上的考量而決定採用何種樣式. 樣式1: 與用戶相關的操作, 通通集中在 user.php 裏. 而user.php內部的程式結構, 大致上是: <?php //1 載入組態檔: //2 對於傳進來的參數進行剖析: //3 對目前調用這份執行稿的用戶進行身份驗證及權限檢查: //3.1 若身份驗證未過或權限不足, 則中止執行, 程序導向錯誤回報處理. //4 根據傳進來的參數判斷用戶所要求的操作: switch($operation){ case 'add': //... break; case 'view': //... break; case 'edit': //... break; case 'delete': //... break; default: //未被定義的操作, 程序導向錯誤回報處理. } ?> 樣式2: 與用戶相關的操作, 分別用檔案維護, 大致上是: user_add.php user_view.php user_edit.php user_delete.php 以 user_add.php 為例 : <?php //1 載入組態檔: //2 對於傳進來的參數進行剖析: //3 對目前調用這份執行稿的用戶進行身份驗證及權限檢查: //3.1 若身份驗證未過或權限不足, 則中止執行, 程序導向錯誤回報處理. //4 進行新增用戶的作業: ?> 樣式1 跟 樣式2 都有人採用, 而且在一些目前蠻popular的open source 當中都能夠發現, 兩種方式都是可行的. 至於決定採用哪種樣式的考量點 是什麼? 這裏就僅針對'維護'做討論: 個人兩種樣式都是混著用, 最早剛寫php是採用樣式2, 因為那時候第一手 入手的範本就是以樣式2設計的. 後來基於以前c/c++編程的習慣, 有一陣 子都是用樣式1, 又再後來直到現在是會看情況混用, 若程式規模小的則習 慣用樣式1, 而若規模大一點的會偏好於採用樣式2. 因為程式規模小(就專門處理某個特定的需求,整個程式大約200~300行左右) 的話, 樣式1即已足夠. 而採用樣式2則是考量到: 這些 user 的 add/view/edit/delete 各有各的被執行的條件, 而這些條件彼此之間關聯 性很小, 又經常因為需求的變動而需要對程式碼做改變, 這樣還是分開維護 比較好. 例如以 user_view.php 為例: <?php //1 載入組態檔: //2 對於傳進來的參數進行剖析: //3 對目前調用這份執行稿的用戶(以下簡稱[檢視者])進行身份驗證及權限檢查: //3.1 必須與[被檢視者]是同一人, //3.2 或是具有[管理者]身份, //3.3 或是[檢視者]在[被檢視者]的好友名單當中. //3.4 若身份驗證未過或權限不足, 則中止執行, 程序導向錯誤回報處理. //4 進行檢視用戶的作業: ?> 可能日後user_view.php又多了些權限檢查的條件, 例如: //3.4 [被檢視者]若關閉個人履歷(profile), 則除了本人及管理者外, 任何人都不能檢視. 對於user_view.php而言, 它的權限檢查就僅跟user_view有關, 跟 add,delete,edit無關, 這就不宜把彼此之間無關的操作綁在一起, 增加 維護的複雜性. 就先醬子囉. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.151.184

01/24 14:06, , 1F
我後來是用if(function_exists('pre_'.$_REQUEST['ac']))
01/24 14:06, 1F

01/24 14:07, , 2F
因為用switch-case 寫太長之後會看錯XD
01/24 14:07, 2F

01/24 14:19, , 3F
我的習慣也是樣式2
01/24 14:19, 3F

01/24 14:19, , 4F
樣式1 有時候 我會看錯區塊/__\
01/24 14:19, 4F

01/27 22:12, , 5F
這時候註解就派上用場啦:P
01/27 22:12, 5F

01/29 08:58, , 6F
我的習慣是先用自然語言擬稿(也是註解),再進入編碼程序.
01/29 08:58, 6F

01/29 08:59, , 7F
所以基本上自己寫的程式幾乎每行都有註解.
01/29 08:59, 7F
文章代碼(AID): #1BMy6Q0B (PHP)
文章代碼(AID): #1BMy6Q0B (PHP)