Прочитал книгу «Элегантные объекты» Егора Бугаенко: https://www.elegantobjects.org Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых – хорошо поддерживаемый код! Я полностью разделяю эту ценность: поддерживаемость – это одна из важнейших характеристик кода. Например, из хорошо известных и зарекомендовавших себя практик, в книге описаны преимущества неизменяемых объектов, разделение на команды и запросы, понятные советы по именованию классов и методов, разделение больших классов на маленькие, более сфокусированные, тесты как документация, внедрение зависимостей и инверсия управления. А также, чего следует избегать при написании поддерживаемого кода: недостатки моков, проблемы статических методов, классов-утилит и синглтонов, NPE ошибка и применение null vs optional vsпустой объект. Кстати, интересный вопрос, над которым я раньше не думал: чем отличаются синглтоны и классы, целиком состоящие из статичес