2009-07-25 64 views
1

我剛剛跳入OOP &現在MVC和我使用這個模板引擎:http://www.milesj.me/resources/script/template-engine關於MVC問題:子類DB活動

我很好奇在哪裏把我的DB調用一個問題(我使用一個基本的數據庫包裝類)。

我見過兩種方法。

級車

/** 
* Counts items in cart 
* @return int 
*/ 
public static function count() { 
    require_once(DATABASE .'cartext.php'); 
    $info = User::getInfo(); 
    $count = CartExt::inCart($info['0']['userid']); 
    return $count; 
} 
類CartExt

然後

/** 
* user cart count 
* @param int 
* @return int 
*/ 
public static function inCart($shopperID) { 
    $db = Database::getInstance(); 
    $query = $db->execute("SELECT * FROM Listing WHERE shopperid = '$shopperID'"); 
    $count = 0; 
    while ($row = $db->fetchAll($query)) { 
     $count++; 
    } 
    return $count; 
} 

有了很大的功能,我可以看到分離兩者的優勢,但很多時候是因爲上面的例子是如此的平凡,或者更糟糕:基類只是調用Ext並返回它的值!另外,我正在做一個require_once函數來降低http請求,如果有人問。

無論如何,我只想對此有一些想法。

另外,我是否正確,我應該在控制器中處理$ _POST ['data']並將它作爲參數傳遞給我的函數,而不是在類中處理它? (如果它很重要,我還沒有使用表單對象/類)。

期待聽到您對此的看法。

+0

現在你讓我問:「做一個require_once來降低http請求」......這是什麼意思? :) – deceze 2009-07-25 03:23:33

回答

1

數據庫調用應該從模型執行。
如果通過雲:

  • 的mysql_query()
  • 數據庫包裝
  • ORMDoctrine

並不重要,只要MVC關注。雖然我可以推薦後者。

推理
當你在該數據通常代表模型數據的數據庫存儲數據:一個用戶,訂單等

例外
如果在數據庫或使用您的存儲會話用於緩存的數據庫。這些更多地屬於Controller而不是Model類。