cakephp: 你應該在控制器中調用Model::query()方法嗎?

模型的query()函數有時是非常實用的,它可以在任何需要數據的地方執行SQL語句.
但不是在什麼地方調用query()方法都是恰當的.特別是在控制器中直接調用模型的query()方法

$this->MyModel->query('Here comes the SQL statement');

在控制器中調用模型的query方法麼有什麼不可以,但它引入了數據庫相關的代碼,這違反了MVC模式的原則

一個更加乾淨的方案是把SQL語句移動到模型中,因此上面那段代碼重構爲:

// 在模型中
function doSomething() {
    
$this->query('Here comes the SQL statement');
}
// i在控制器中
$this->MyModel->doSomething();

不要在控制器中加入數據庫相關的代碼,這些代碼都應該放置在模型中,有模型去處理

這個方案需要編寫更多的代碼,但是它帶來了一些優點:

    * 易於測試
    * 更可讀
    * 避免了查詢代碼在多個控制器之間導出複製,使代碼更簡潔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章