Application слой (contexts/{context}/application/)
В разделах ниже представлены основные компоненты пакета для работы с application слоем.
Предполагаемая структура папок:
application/
├── services/ # Сервисы приложения
│ ├── AuthService.ts
│ └── index.ts
├── providers/ # Application провайдеры
│ ├── ApplicationProvider.ts
│ └── index.ts
└── index.tsДля работы с application слоем следует
- Подготовить слой инфраструктуры и предоставить через провайдеры нужные нам репозитории.
- Написать наши сервисы (сценарная логика и реализация методов репозитория).
- Добавить сервисы в ApplicationProvider и заинжектить в них репозитории из инфраструктуры.
Работа с boundary providers была описана в разделе инфраструктуры, поэтому здесь мы коснёмся этой темы только в общем контексте.
Когда у нас готова инфраструктура, мы можем писать сервисный слой в папке application/services. Большинство сценарной логики пишется вами, поэтому в этом слое почти не будет готовых компонентов.
Базовый пример сервиса
typescript
import { AuthRepository } from '${ContextName}/infrastructure/http/repositories';
import type { ILoginRequest } from '${ContextName}/domain/auth';
export class AuthService {
constructor(private authRepository: AuthRepository) {}
async login(request: ILoginRequest) {
// Здесь вы можете расположить некий сценарий логина (сценарную логику, если она есть), либо просто проксировать метод репозитория
return this.authRepository.login(request);
}
async current() {
return this.authRepository.current().catch(() => undefined);
}
async logout() {
return this.authRepository.logout();
}
}