Какой дизайн лучше? - PullRequest
       25

Какой дизайн лучше?

7 голосов
/ 08 апреля 2009

У меня есть следующий класс:

class User {

  public function setName($value) { ... }
  public function setEmailAddress($value) { ... }
  public function setUsername($value) { ... }
  public function getName() { ... }
  public function getEmailAddress() { ... }
  public function getUsername() { ... }

  public function isGroupAdministrator($groupId) { ... }
  public function isMemberOfGroup($groupId) { ... }
  public function isSiteAdministrator() { ... }
  public function isRoot() { ... }
  public function hasModulePermission($moduleId, $recordId, $permissionCode) { ... }
  public function hasGroupPermission($groupId, $permissionCode) { ... }
  public function hasContentPermission($recordId, $permissionCode) { ... }
  public function hasModulePermission($moduleId, $recordId, $permissionCode) { ... }
  public function canLogIn() { ... }
  public function isLoggedIn() { ... }
  public function setCanLogIn($canLogIn) { ... }

}

Становится ли это "классом Бога"?

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

Полагаю, я мог бы поместить связанные с разрешениями методы в некоторый класс Permission, сделав эти методы статичными (например, :: userIsGroupAdministrator (...), :: userIsMemberOfGroup (...) :: userHasGroupPermission (...) , :: userHasContentPermission (...))

Любые предложения о том, как этот класс может быть лучше?

Ответы [ 13 ]

0 голосов
/ 08 апреля 2009

Я бы хотя бы удалил функцию setCanLogIn($canLogIn). Это действительно должно быть определено внутри класса в зависимости от того, предоставил ли пользователь правильные учетные данные и был ли он аутентифицирован.

В зависимости от того, насколько велик этот проект или является ли он частью фреймворка, будет зависеть необходимость дополнительной абстракции.

0 голосов
/ 08 апреля 2009

Я бы разделил аспект «пользовательский» и «групповой» аспект управления классом.

0 голосов
/ 08 апреля 2009

Я хотел бы рассмотреть возможность создания класса Permissions и сделать его членом класса User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...