Skip to content

Application слой (contexts/{context}/application/)

В разделах ниже представлены основные компоненты пакета для работы с application слоем.

Предполагаемая структура папок:

application/
├── services/             # Сервисы приложения
│   ├── AuthService.ts
│   └── index.ts
├── providers/            # Application провайдеры
│   ├── ApplicationProvider.ts
│   └── index.ts
└── index.ts

Для работы с application слоем следует

  1. Подготовить слой инфраструктуры и предоставить через провайдеры нужные нам репозитории.
  2. Написать наши сервисы (сценарная логика и реализация методов репозитория).
  3. Добавить сервисы в 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();
    }
}