Прочитал книгу «Элегантные объекты» Егора Бугаенко: https://www.elegantobjects.org
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых – хорошо поддерживаемый код! Я полностью разделяю эту ценность: поддерживаемость – это одна из важнейших характеристик кода.
Например, из хорошо известных и зарекомендовавших себя практик, в книге описаны преимущества неизменяемых объектов, разделение на команды и запросы, понятные советы по именованию классов и методов, разделение больших классов на маленькие, более сфокусированные, тесты как документация, внедрение зависимостей и инверсия управления.
А также, чего следует избегать при написании поддерживаемого кода: недостатки моков, проблемы статических методов, классов-утилит и синглтонов, NPE ошибка и применение null vs optional vsпустой объект.
Кстати, интересный вопрос, над которым я раньше не думал: чем отличаются синглтоны и классы, целиком состоящие из статических методов? Синглтон в тестах можно подменить, если есть метод setInstance()
.
Но есть много радикальных идей, которые вызывали у меня сопротивление и отрицание.
На сколько я понял, материал книги основан на блоге автора: https://www.yegor256.com. Зачастую, когда у меня возникал очередной вопрос-возражение, в конце главы я обнаруживал свой вопрос в виде вставленного комментария от одного из читателей блога и тут же ответ Егора. Удивительно, на сколько мои вопросы совпадали с приведёнными комментариями. К сожалению, ответы меня так и не убедили, многие вопросы остались. Чтобы лучше прояснить позицию Егора, думаю, стоит более глубоко изучить его блог, почитать комментарии, возможно влиться в тусовку в телеграме https://t.me/elegantobjects и https://t.me/painofoop.
В итоге, станет ли код более поддерживаемым, если писать ПОЛНОСТЬЮ по описанным рекомендациям? Книга меня не убедила. Но, по крайней мере, я получил удовольствие от чтения. Рекомендую.