※ 引述《kyowinner (mars)》之銘言:
: 各位好 想問一個好像有點蠢的問題
: 也是突然想到的,不知道跟執行效率有沒有什麼關係
: 就是在一個專案裡各位會大概怎麼安排檔案/程式架構
: 問題如下
: 1. 所有程式碼在同一個檔案下 ex:index.php
: index.php 用if 或是任何方式去判斷要執行的功能
: if(新增A頁面資料){
: }elseif(刪除A頁面資料){
: }elseif(.....)}
: }
: 諸如此類
以這年頭的 MVC framework 來考量,這是半個「正確」答案了
這樣的好處是你可以把全專案共通邏輯放在同一個地方
甚至連 render 畫面的邏輯都放在同一個地方
然而不共通邏輯也放在同一個地方會很難改
所以最好是把不共通邏輯拆出去
於是就會變成
index.php
// 載入共通功能
include __DIR__ . '/lib/lib.php';
// 用路徑跟 http method 決定要做什麼
// $action 是檔名
$method = $_SERVER['REQUEST_METHOD'];
$uri = rawurldecode($_SERVER['REQUEST_URI']);
$action = checkAction($url, $method);
// 執行功能,得到結果
$logicFile = __DIR__ . "/action/{$action}.php";
$result = include $logicFile;
// 印出結果畫面
render($action, $result);
雖然很土炮,但是 MVC framework 的樣子已經出來了
checkAction() 是 Router
/action 資料夾裡面的東西是 Controller
render() 處理 View
Model 在哪裡?在 controller 的邏輯裡面
系統核心主幹裡面原則上不該有
這是完全不使用 OOP 跟 Class autoloading 的前世代寫法
基本上一路 include 是能夠打天下,但系統要變大後問題還滿多的
可以參照 #1NHddLlC (Soft_Job)
用 OOP 的寫法大概會是這樣
// 載入 autoloader
include __DIR__ . '/vendor/autoload.php';
// 用路徑跟 http method 決定要做什麼
// $action 是 class name,例如 "\My\Controller\Article"
$method = $_SERVER['REQUEST_METHOD'];
$uri = rawurldecode($_SERVER['REQUEST_URI']);
$action = (new \My\Router())->route($url, $method);
$controller = (new $action());
// 執行功能,得到結果
$result = $controller->run();
// 印出結果畫面
$template = $controller->getTempate();
(new \My\View)->render($template, $result);
各 Framework 其實差不多就是這樣做出來的。
當然啦,比起各知名 framework 這依然相當土炮。
不過這樣的架構已經可以讓你用很久了
自己刻 framework 沒那麼難的啦(大拇指
: 2.各頁面相對應各自的程式檔
: A.html