模型的query()函數有時是非常實用的,它可以在任何需要數據的地方執行SQL語句.
但不是在什麼地方調用query()方法都是恰當的.特別是在控制器中直接調用模型的query()方法
在控制器中調用模型的query方法麼有什麼不可以,但它引入了數據庫相關的代碼,這違反了MVC模式的原則
一個更加乾淨的方案是把SQL語句移動到模型中,因此上面那段代碼重構爲:
function doSomething() {
$this->query('Here comes the SQL statement');
}
// i在控制器中
$this->MyModel->doSomething();
不要在控制器中加入數據庫相關的代碼,這些代碼都應該放置在模型中,有模型去處理
這個方案需要編寫更多的代碼,但是它帶來了一些優點:
* 易於測試
* 更可讀
* 避免了查詢代碼在多個控制器之間導出複製,使代碼更簡潔