2012-09-03 66 views
0

我正在編寫自己的PHP MVC框架,我想知道哪個是最適合編寫持久數據對象的地方,例如用戶。如果沒有像$ _SESSION,APC,memcached這樣的持久性存儲,...有人可以從每個http請求的數據庫中檢索用戶數據,這在性能方面是一個壞主意。 (M)odel似乎是一個不錯的選擇。是這樣的一個很好的開始:MVC框架內的持久對象

class UserModel extends Model 
{ 
    public function getEmail() 
    { 
    $user = Session::get('User'); 
    if(isset($user)) 
    { 
     return $user->Email; 
    } 
    return null; 
    } 
} 

可能不會,因爲它不是返回db模型做的數據。我應該創建一個獨立的課程嗎?這是否有任何模式?我不想讓它成爲全球性的,誰是這些對象的所有者/經理?

+0

請不要寫一個,那裏已經有很多的PHP框架了......你會浪費很多時間,並且比如果你第一次瞭解現有框架試圖解決的問題要少很多常見問題以及隱含的模式。如果沒有,請檢查Lithium/Symfony2。 – Olivier

+0

@奧利維爾我不同意。世界不需要*另一個開源框架*,真實。但沒有理由不使用專門爲您的需求定製的框架來滾動您自己的應用程序結構。 – deceze

+0

@deceze我想你的建議是私密的,但其缺點是非常龐大和耗時(安全,orm層),它不會出現在我的腦海中,並且考慮到操作的級別,我認爲需要公正的警告。 – Olivier

回答

2

您的模型應該只對業務邏輯進行建模。他們不應該與用戶交互有關。這是控制器的工作(和視圖)。會話完全處於用戶交互領域。所以不要在模型中使用它們。始終假設您將使用命令行或其他會話不存在的其他上下文中的模型。這應該會告訴你很多你的應用程序設計。

您可以在各個階段實施緩存以減少主數據存儲上的負載。您應該有一個模型層服務層,它表示您的應用程序的核心邏輯。該圖層有一個定義的API,用於在您的應用中執行某些操作。可能在幕後使用memcache等內部緩存一些數據以減少數據庫負載。
然後,您應該有一個視圖圖層,它從模型圖層獲取數據並將其可視化。該視圖層可能緩存從模型圖層收到的數據。

最大的問題:正確分開您的疑慮。見N-Tier Architecture - An Introduction,這可能會給你更多的想法。