Чистая архитектура на frontend. Что это такое? Особенности, преимущества и недостаткиИнтересный вопрос. Не знаю проголосуют ли за него, чтобы я разобрал на стриме. Но мне кажется в отношении чистой архитектуры нужно понять следующие моменты.
1. Основная идея чистой архитектуры - это управление зависимостями таким образом, чтобы изолировать бизнеслогику от всего кроме непосредственно бизнес-фич
2. Изоляция выполняется через создание интерфейсов, которые формируют границы модулей и позволяют выстраивать логику внутри модуля
3. Роберт Мартин считает, что уровень абстракции тем выше, чем дальше от ввода/вывода данных он находится, таким образом в чистой архитектуре бизнес логика должна быть слабо зацеплена на ввод/вывод
4. Поток управления может не совпадать с зависимостями, а по факту не будет совпадать, так как вызов функций всегда идет между вводом и выводом, посредством слоя бизнес-логики
5. Ядром архитектуры являются - варианты использования и сущности, которые окружены инфраструктурными и управленчискими конструкциями
Таким образом, чтобы фронтенд соотвествовал чистой архитектуре необходимо выполнить следующие шаги:
1. выделить бизнес-логику в виде сущностей и вариантов использования
2. изолировать бизнес логику от низкого уровня (а именно ввод/вывод, проверка и очистка данных)
3. выделить интерфейсы для взаимодействия низкого и высокого уровня абстракции (интерфейсы нужно выделять со стороны бизнес-логики)
4. Для преодоления границы через интерфейсы разработать DTO, которые необходимы только для переноса данных (короткий срок жизни)
5. Сформировать инфраструктурные и управленческие функции отдельно от БЛ
В зависимости от фреймворка можно делать по-разному, например, в ангуляре модуль уже является достаточно изолированным, с сильной границей, поэтому там нужно просто сформировать модули БЛ и инфраструктурные так, чтобы они были отделены друг от друга, а общались посредством интерфейсов.
В реакте наоборот, нужно продумать каким образом провести границы, так чтобы удовлетворять условиям выше.
Но в целом чистая архитектура бэкнеда не сильно отличается от чистой архитектуры фронтенда, обычно границы хорошо видны по файловой структуре проекта, различия есть в источниках данных (БД или HTTP-API) и нюансах инфраструктуры.