2009-08-03 75 views
1

比方說,我有一個用戶模型。我會將方法放在模型本身上,還是作爲模板,以便我可以從用戶表格對象訪問它?在學說中,我應該在哪裏放置自己的方法?

換句話說,這是更可取:

$u=new User(); 
$u->register($username, $password, $email); 

$userTable = Doctrine::getTable('User'); 
$userTable->register($username, $password, $email); 

我的直覺會是第二個,因爲它在邏輯上更有意義,但什麼東西像密碼更改,登錄等?我真的應該把這些放在用戶模型上,而我保留像在用戶表格對象上註冊的東西嗎?

回答

2

它可能不會完整地回答你的問題,但如果馬修·韋爾o'phinney幾天前發佈的Play-Doh: Modelling Your Objects會議,你可能會對幻燈片感興趣;那裏包含很好的東西,可以讓你思考模型;-)

(他們讓我想..但我仍然不能給出一個明確的答案你的問題:我會說「這取決於......」但不知道什麼^^)

也許,在一個大的應用程序的情況下,我會用多了一個層:

  • 型號,訪問數據
  • 「服務」,來操縱它;能夠做比我會放在模型......而沒有在控制器,它不屬於
  • ,當然更多的,控制器和視圖

但你」我永遠不會讓每個人都同意...所以我會說選擇一種方法,並確保你的團隊中的每個人都這樣做整個項目:沒有什麼比在一個項目/應用程序中混合太多不同方式更糟!

2

通常,如果事情與用戶的特定實例相關,即:我或你,它們屬於User類。如果它們涉及一組用戶,或者我們還沒有用戶(即:從數據庫加載它們),則它們屬於Table類。

我會做你的例子如:

class UserTable { 
    function register($username, $password, $email) { 
    $user = new User; 
    $user->username = $username; 
    $user->password = $password; 
    $user->email = $email; 
    $user->save(): 
    } 
} 

人們會爭論,其中有些東西屬於雖然,節能是其中之一!我知道Propel是另一個類似的PHP ORM,在它的Table等價物中以及在它的Object等價物中包含一個save方法,並且您的註冊與此類似。所以很快就有人會一起爭論對方!

爲了回答其他問題,在我看來:

密碼更改的用戶所屬,絕對 - 要更改用戶的密碼,它只是改變一個字段。

登錄應該在表類中 - 它是一個專門的檢索案例。