2012-01-16 32 views
0
管理對象

問:與多個上下文

是否有用於處理在不同的上下文中的對象的優選設計模式?例如:如果我需要從數據庫中獲取用戶,那麼該對象需要才能擁有一個id和一個特權級別。但是,如果我想創建一個新用戶進行註冊,那麼它不需要一個id,因爲這將通過auto_increment添加到數據庫中。來賓用戶不需要身份證,但應具有「來賓」的用戶名。

嘗試的解決方案

使用構造似乎忽略上下文。

爲registered_user,new_user和guest_user創建新對象似乎很浪費。

在用戶對象內創建可用於以獨特方式初始化它的方法是誘人的。

截至目前,我認爲我應該創建一個單獨工廠,具有以下功能:create_guest($ X),create_new_user($ X,$ Y),create_registered_user($ X,$ Y,$ Z)?這將允許用戶對象有一個目的:持有一個用戶(同時允許它有一個構造函數來建立一個最低要求),並且還有一個用戶工廠,其唯一目的是:啓動不同類型的用戶。

請原諒任何無知,只是尋找最佳的設計模式來處理獨特的上下文中的同一個對象。

例子:

<?php 
    class user 
    { 

     private id; 
     private username; 
     private privilege; 

     public function __construct() 
     { 
      some code... 
     } 

     public function is_admin() 
     { 
      some code... 
     } 
    } 
?>  

回答

0

使用提供的類,你可以隨時autoinitialize爲$this->id值設爲0,並用它來確定該用戶是一個客人。主要的想法是,你永遠不會在你的數據庫中有一個0的ID(如果你正在使用自動增量這個列)。

這也可以用來檢查您是否要更新或創建記錄。一個簡單的ID檢查將顯示0或另一個int。如果它是0,那麼它是客人或應該創建它。如果它大於0,它已經被創建並且需要被更新。

一般來說,我更喜歡收拾創建並通過加入load()update()create()delete()方法,其中load()將接受其中,如果通過將用於加載數據到一個數組/對象更新到用戶類本身當前上下文,或者如果不提供,函數將嘗試從不同的源(例如數據庫)讀取數據。