В Doctrine, где я должен использовать свои собственные методы?

StackOverflow https://stackoverflow.com/questions/1223847

  •  11-07-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть пользовательская модель.Могу ли я поместить методы в саму модель или в качестве шаблона, чтобы я мог получить к ней доступ из объекта user table?

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

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

или

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

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

Это было полезно?

Решение

Вероятно, это не будет полным ответом на ваш вопрос, но вам может быть интересно взглянуть на слайды, если Пластилин:Моделирование Ваших объектов конференция, которую Мэтью Вейер о'Финни опубликовал несколько дней назад ;там есть приятные вещи, которые могли бы заставить вас задуматься о Моделях ;-)

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

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

  • Модель, для доступа к данным
  • "Сервис", чтобы манипулировать им ;быть способным делать больше, чем то, что я бы заложил в Модель...И нет этого в Контроллере, где ему не место
  • И, конечно же, Контроллер и представления

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top