Привет! 👋
Меня зовут Саша, я разработчик в DRIVE2.
Веду технический блог, пишу книги о разработке. Сегодня расскажу о чистой архитектуре и как её можно применять во фронтенде.
System Design
Чистая архитектура
Правило зависимостей
Преимущества
- 🐕 Независимый домен
- 🧭 Сценарии приложения расширяемы
- 🔗 Внешние сервисы заменяемы
- 😎 Внешний мир подстраивается под наше приложение, а не наоборот
Издержки
- ⏳ Требует дополнительного времени
- 🦄 Не каждому проекту нужны все слои
- 😱 Может увеличить порог входа
- 🏋️♂️ Может увеличить количество клиентского кода
Способы уменьшить издержки
Самое главное:
- 😼 Выделить домен
- 🎲 Соблюдать правило зависимостей
Лайв-дизайн!
С его начать?..
Домен
Прикладной слой
Слой адаптеров
Тип пользователя
Товар и корзина
Тип заказа
Смотрим, работает ли
Shared Kernel
type Email = string;
type UniqueId = string;
type DateTimeString = string;
type PriceCents = number;
Проектируем сценарий покупки
«Нечистый» контекст для чистых функций
Сценарий покупки
- 📝 Создать новый заказ
- 💸 Оплатить в сторонней платёжной системе
- 🚨 Если оплата не прошла, сообщить пользователю
- 💿 Если прошла, сохранить заказ на сервере
- 📚 Добавить заказ в локальное хранилище данных
type OrderProducts = (user: User, cart: Cart)
=> Promise<void>
Проверим сценарий
Закладываем фундамент адаптеров
- 📦 Адаптеры ко хранилищу
- 💳 К платёжной системе
- 📢 К сервису уведомлений
Как теперь работает приложение
Feature Slice
А как же ООП?