2014-06-17 77 views
-1

我正在使用PHP編寫的應用程序。我決定遵循MVC架構。然而,隨着代碼變得越來越大,我意識到某些代碼會在某些情況下被重複使用。另外,我仍然困惑於在查詢數據庫時是否應該使用靜態函數。在php中處理mysql查詢mvc

讓我們先我如何做到這一點的例子:

class User { 
    private id; 
    private name; 
    private age; 
} 

現在,這個類中,我會寫上的單個用戶實例(CRUD操作)操作的方法。在另一方面,我說一般的靜態函數來處理多個用戶,如:

public static function getUsers() 

,我現在面臨的主要問題是,我必須通過訪問結果中的字段,當我通過用戶需要循環我的看法。例如:

$users = User::getUsers(); 
// View 
foreach($users as $user) { 
    echo $user['firstname']; 
    echo $user['lastname']; 
} 

我決定這樣做,因爲我不覺得有必要爲所有用戶創建一個單獨的用戶實例只是做一些簡單的數據處理喜歡展示他們的信息。但是,如果我更改表格字段名稱呢?我必須通過所有的代碼,並改變這些領域,這是困擾我的東西。

所以我的問題是,你如何處理這樣的數據庫查詢,查詢數據庫時使用靜態函數是否正常。最後,存儲那些「顯示」功能(如我所討論的功能)在哪裏合乎邏輯?

回答

0

你的方法似乎很好,但我仍然會使用緩存,如memcached緩存值,然後你可以刪除靜態。

public function getUsers() { 
    $users = $cacheObj->get('all_users'); 
    if ($users === false) { 
    //use your query to grab users and set it to cache 
    $users = "FROM QUERY"; 

    $cacheObj->set('all_users', $users); 
    } 

    return $users; 
} 
+0

您可以詳細說明$ cacheObj-> get('all_users')是如何工作的嗎?或者你能建議一篇文章對待這種緩存方法嗎? – abdelk

+0

@abdels all in php.net:'http:// www.php.net // manual/en/memcached.set.php' – GGio

-1

(M)奧德爾(V)IEW(C)ontroller是一個不錯的選擇的選擇,但我的建議是看看使用的框架。他們可以有一個步驟的學習曲線,親是否做了很多繁重的工作。但是如果你想繼續自己的公平競爭,你自己可能很難做到。

明智的位置,你有一個選擇,因爲該模型並不明確界定: 你會聽到「商業邏輯」中,基本上型號擁有一切裸露的意見和控制器。控制器應該只是移動數據然後將其返回到視圖。

您可以模擬數據庫交互,數據轉換,時區更改以及常規日常功能。

Moudle /用戶 /型號 /DB或(實體和映射器) /utils的

我使用Zend和它使用表網關標準CRUD以避免重複。

如果您有getUsers()方法,您只需將一個數組傳遞給它,並且它變得真正可重用,並且您將在各種控制器操作中擁有不同的數組,並且它會根據數組信息構建查詢。

例子:

$data = array ('id' => 26) 
$userMapper->getUsers($data); 

得到用戶的26個

enter code here 
$data = array ('active' => 1, 'name' => 'Darren') 
$userMapper->getUsers($data);` 

讓活躍用戶名爲達倫

我希望這幫助。