@phpcoder81

Надо делать наследование или нет?

Никак понять не могу. В примерах по ООП часто пишут, есть класс User и наследники UserStandart, UserAdmin, ну примерно так, +-.

А у меня класс User, в котором сразу прописаны все методы управления. А то, каков статус пользователя, записано в свойстве: 1 обычный юзер, 2 админ.

И я вот не пойму, зачем делать наследование в данном случае, ради примера, или тут есть смысл?
  • Вопрос задан
  • 199 просмотров
Пригласить эксперта
Ответы на вопрос 6
fomvasss
@fomvasss
PHP developer
Если у вас всегда экземпляр класса User имеет одинаковые методы и поля, то и классов отдельных не нужно делать. Тем более что конкретно в вашем примере функционал юзера, можно отделить ролями/правами, которые могут быть реализованы позднее отдельно.
Ответ написан
@Arik
if($user instanceof UserAdmin) {
//admin
}
public function openWebsite(UserAdmin $userAdmin) {
// 
}

Точно знаем что юзер админ или просим чтоб юзер был только админом, как там реализована проверка на админство уже этот код не касается.
Ответ написан
Комментировать
Есть хороший способ определить рациональность использования наследования. Для этого нужно ответить на ряд вопросов:
- оба класса из одной предметной области;
- наследник отвечает принципу подстановки Барбары Лисков;
- код наследуемого класса необходим либо хорошо подходит для наследника;
- наследник в основном добавляет логику.
Чем больше положительных ответов, тем больше вероятность, что вы не промахнетесь с выбором наследования.

Конкретно в вашем случае я рискну предположить, что использование наследования излишне, и даже может стать бомбой замедленного действия при дальнейшем развитии системы. Здесь наследование выступает в роли выбора возможных алгоритмов действий пользователя в системе и введение новых ролей может оказаться очень дорогим, особенно если один пользователь должен будет обладать сразу несколькими ролями.
Ответ написан
Комментировать
@Yan-s
Надо или нет определяете вы проектируя архитектуру приложения. Примеры пишутся для объяснения сути, что наследование, это когда один объект - более конкретная разновидность другого.
Ответ написан
Morpheus_God
@Morpheus_God
У вас может быть в классе User описано лишь поле Name и поле LastName.
А в конкретной реализации вы можете дописать для каждого конкретного юзера уже свои методы и дополнительные поля. Все от проекта зависит.
Ответ написан
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
Наследование используется для инкапсуляции проверки isAdmin. Грубо говоря, все if-ы, выполняющие проверку, превращаются в записи VMT (или что там в PHP).

Архитектура может зависеть от количества ролей. Одно дело -- проверять только на админа, и другое -- на кучу разных ролей. Код с кучей switch -- фактически эмуляция VMT, лучше разрешить эту задачу архитектурно, воспользовашись ООП.

Аргументом против ООП может быть еще и характер кода. К примеру, в большинстве методов действия админа являются дополнением к действиям простого пользователя, и тогда if-ы смотрятся не так убого. Хотя, если дополнительного кода много, и отличия админской роли хочется видеть в виде логически единой реализации, а не набором разрозненных дополнений, лучше воспользоваться ООП.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы