Сейчас в дополнение к котикам сделаем онлайн-магазин печенек! 🍪
Допустим, наш магазин продаёт разные виды печенек. У каждой печеньки есть цена, состав и срок изготовления.
Пользователи могут покупать печеньки на сайте, указывая предпочтения по вкусам, аллергиям, наличию молока и проч.
В доменный слой я бы вынес следующее.
- Типы печеньки и пользователя;
- функцию для подсчёта скидки на печеньку по промокодам;
- функции для определения, подходит ли печенька по вкусовым предпочтениям.
Важно, эти функции принимают данные в _удобном для себя_ виде.
Дальше, слой адаптеров и портов. (Да, сейчас поговорим о самом внешнем слое, я в конце покажу, почему именно так: будет чуть проще увидеть разницу.)
Что у нас тут?
- UI: рендер страниц и компонентов, обработка событий;
- общение с сервером и API;
- сохранение в localStorage...
Задача адаптера — сделать интерфейс стороннего сервиса совместимым с тем, который _хочет наше приложение_.
Это значит, что если API отдаёт данные в виде snake_case, а мы хотим camelCase, заниматься этим будут адаптеры.
Порт — спецификация, как сторонние сервис _может_ общаться с нашим приложением, или как наше приложение _хочет_, чтобы с ним общались сторонние сервисы.
Это всё был внешний слой.
Прикладной слой (между доменом и портами/адаптерами) — описывает сценарии, конкретно этого приложения.
Допустим, у нас кроме этого магазина, есть ещё проект, где печеньки просто выставляются в виде произведения искусства (их нельзя купить).
Тогда прикладной слой магазина будет содержать:
- работу со списком товаров и корзиной,
- сценарии покупки...
При этом ту часть, например, оплаты, которая использует внешний сервис (допустим, PayPal), мы вынесем в адаптер.
А в прикладном слое оставим логику, которая описывает что нужно сделать, чтобы оплата была вызвана, что нужно сделать после успешной оплаты или отклонения платежа.
Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.
Если вы работали c ytq, расскажите о своём опыте? Что было круто, что было неудобно? Будем разбираться, действительно ли это полезный инструмент, или просто переусложнённый хайп.
Начнём с того, что такое «Чистая архитектура».
Behold!
В общих чертах: весь код поделен на слои.
Центральный слой (домен) — ядро приложения, максимально независим и отвечает за то, чем приложение отличается от других.
Прикладной слой рулит сценариями, которые специфичны конкретно этому приложению.