Я был адептом чистой архитектуры
👁 376💬 8
5 лет назад, начитавшись кучу книжек и статей про чистую архитектуру, изучив огромное количество паттернов проектирования, я понял, что вот она - идеальная архитектура.
Гексагональная архитектура с портами и адаптерами. Соблюдаем все принципы дяди Боба, отделяем базу данных от бизнес-логики, применяем Domain Driven Design.
Сначала пишем на нативном "TypeScript" всю бизнес-логику с сущностями в виде классов с геттерами и сеттерами. Пишем use-cases, применяя принципы SOLID, в особенности Dependency Inversion - вместо реализации в use-cases пишем interfaces с методами.
Но чтобы добавить простую фичу, приходилось:
- Создать entity
- Создать interface для repository
- Создать реализацию repository
- Создать use-case
- Создать DTO для входа
- Создать DTO для выхода
- Создать mapper из entity в DTO
- Создать controller
- Создать interface для adapter
- Создать реализацию adapter
Чтобы добавить поле в форму регистрации, я правил 8 файлов.
Что пошло не так:
1. Абстракции ради абстракций
У меня было 50 интерфейсов с одной реализацией. Зачем? "Чтобы можно было заменить". Но за 3 года я не заменил ни одного.
2. Бойлерплейт
Половина кода - маппинг между слоями. Entity > DTO > Response. И обратно.
Это не бизнес-логика. Это просто перекладывание полей.
3. TypeScript - это не Java
Я пытался писать на TypeScript как на Java. Классы, приватные поля, геттеры, сеттеры.
Но TypeScript - это JavaScript с типами. Функциональный подход тут работает лучше.
4. Команде сложно
Новый разработчик тратил недели на то, чтобы разобраться в структуре. Где что лежит? Зачем столько папок? Почему для одной фичи 12 файлов?
Джун вообще не мог писать код, так как слишком много абстракций.
Что я понял:
Чистая архитектура работает, когда:
- Большая команда
- Сложная domain-логика (банк, ERP)
- Долгоживущий проект (5+ лет)
В стартапе с командой 3-5 человек это оверкилл.Сейчас я чаще всего использую какой-либо фреймворк типа NestJS если на NodeJS. Пишу проще. Без лишних слоев. А если понадобится сложность - добавлю. Пока работает просто.
Чистая архитектура - не плохая. Но не для всех проектов.15/100 Telegram
211
Кирилл Гаврилов
Подписаться