Как стать автором
Обновить

Комментарии 10

Очередная попытка объяснить SOLID на вымышленных примерах провалилась.

Ваш первый пример из SRP уже нарушает SRP, ибо там пользователь помимо инфы о самом пользователе хранит ещё и книги и друзей. Вас смутило что то только когда в него добавили работу с БД.

А можем ли мы добавить сюда валидацию входящих данных? Вот тут вопрос действительно философский. Короткий ответ: нет, это нарушит SRP (почему?)

Почему это не можем? Очевидно любой публичный метод должен проверять входные данные, иначе как гарантировать, что туда не придёт мусор?

В примере с OCP вообще неудачный пример. Как работает ModeratorFeature? Этот класс принимает на вход пользователя и что? Как он понимает, модератор это или нет? В классе пользователя есть какая то инфа получается про это? А как бан работает? Он что то меняет в пользователе? Получается у пользователя есть публичные поля\методы, связанные с проверкой, является ли пользователь модератором и публичный метод для бана. Кто помешает дёрнуть их напрямую? Как такой код в реальной разработке вообще использовать?

Не любые изменения можно внести не поменяв существующий код, очевидно (наверное), что роли пользователя нет смысла городить отдельной непонятной абстракцией поверх пользователя. И всё ещё не понятно, как это можно сделать не изменив существующий код класса User.

Ну и так далее, дальше даже читать не хочется.

P.S. обилие таких опечаток в коде как delelte, cosntructor и непонятно откуда взявшийся параметр id в конструкторе ModeratorFeature говорят о том, что код даже не запускался :(

И как всегда, на десерт пункты 4 и 5. Их в принципе нельзя объяснить через JS - в языке нет абстракций (интерфейсов). Каждый раз в этих двух параграфах придумывается что-то своё.

Интересно, в каких случаях метод isModerator класса Moderator может вернуть false?

Замьютили модератора, временно.

Он от этого перестал быть модератором или лишился права банить?

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

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

Так и отвечать на собеседовании?

В пунктах не хватает неправильного примера и правильного примера, как исправить неправильный. А так, статья полезная, спасибо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории