Краткий обзор архитектуры
Astral Architecture Guide состоит из архитектурных слоев, некоторые слои делятся на сегменты.
Зависимости между слоями/сегментами приложения направлены сверху вниз.
Нижестоящий слой/сегмент ничего не должен знать о вышестоящем.
Пример структуры проекта:
├── app/
├── screens/
├── modules/
├── data/
└── shared/
Shared. Независимость от низкоуровневых реализаций и библиотек
Shared
слой содержит переиспользуемые программные сущности, не относящиеся к предметной области проекта.
Shared
позволяет приложению не зависеть от низкоуровневых реализаций, включая библиотек.
Shared
можно рассматривать как слой, который можно вынести в npm пакет и использовать на других проектах с другой предметной областью.
Пример структуры Shared
для React стэка:
├── app/
├── screens/
├── modules/
├── data/
└── shared/
| ├── constants/
| ├── types/
| ├── utils/
| ├── services/
| ├── stores/
| ├── ui/
| | ├── components/
| | ├── hooks/
| | ├── external.ts
| | └── index.ts
| └── index.ts
Data. Работа с данными приложения
Data
слой отвечает за работу с данными:
- Получения данных из источников (сервер, localStorage…)
- Агрегация и форматирование данных
- Кэширование и модификация кэша
- Распространение типов DTO по приложению
Data
позволяет:
- Защитить при ложение от изменений API
- Отвязаться от источника данных и метода их получения
Data
содержит два сегмента:
Repositories
. Facade, предоставляющий данные приложению.Sources
. Сервисы, отвечающие за получение данных из разных источников.Sources
может быть автосгенерированным
├── app/
├── screens/
├── modules/
├── data/
| ├── repositories/
| ├── sources/
| └── index.ts
└── shared/
Sources
Sources
- сегмент с сервисами без логики, ответственные только за получение данных из различных источников. Источник может быть любой: API, localStorage…
Sources не занимаются форматированием данных, они просто их достают из источника и передают Repository.
Repositories
Repositories
- это сервисы, используемые в Modules для работы с данными. Данные в Modules запрашиваются только через Repositories.
Repositories используют Sources
для получения данных и дальнейшей их агрегации, форматирования, кэширования.