2009-08-03 6 views
1

Предположим, у меня есть модель User. Я бы поставил методы на самой модели или в качестве шаблона, чтобы я мог получить к нему доступ из объекта таблицы пользователя?В Доктрине, где я должен поместить свои собственные методы?

Другими словами, что является более предпочтительным:

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

или

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

Мой инстинкт будет второй, так как она логически имеет смысл, но что о таких вещах, как изменение пароля , вход в систему и т. д.? Должен ли я действительно помещать их в модель User, пока я сохраняю такие вещи, как register на объекте таблицы пользователя?

ответ

2

Это, вероятно, не будет полным ответом на ваш вопрос, но вам может быть интересно взглянуть на слайды, если конференция Play-Doh: Modelling Your Objects, опубликованная несколько дней назад Мэтью Вейером o'phinney; там есть приятные вещи, которые могли бы заставить вас задуматься о моделях ;-)

(Они заставляли меня думать ... Но я до сих пор не могу дать окончательного ответа на ваш вопрос: я бы сказал, «это зависит» ... Но не уверены в том, что ^^)

Возможно, в ситуации большого приложения, я хотел бы использовать еще один слой:

  • модель, чтобы получить доступ к данным
  • «Сервис», чтобы манипулировать Это ; будучи в состоянии сделать больше, чем я бы поставил в модели ... И не имея, что в контроллере, где он не принадлежит
  • И, конечно же, контроллер и просмотров

Но вы» я никогда не позволю всем согласиться ... Поэтому я бы сказал, что выберете один из способов, и убедитесь, что все в вашей команде так делают для всего проекта: нет ничего хуже, чем слишком много разных способов, смешанных в одном проекте/приложении!

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, включает метод сохранения в его эквиваленте таблицы, а также в его эквиваленте Object, и ваша регистрация аналогична этому. Так что уверен, что кто-то скоро будет спорить с другой стороной!

Чтобы ответить на другие вопросы, на мой взгляд:

Изменение пароля принадлежит Пользователю, безусловно, - вы меняете пароль пользователя, его просто изменить поле.

Вход в систему должен быть в классе таблицы - это специализированный случай извлечения.

Смежные вопросы