Чистая архитектура: реализация моего первого варианта использования

Следуя курсу, который я использую для изучения Clean Arch, идея состоит в том, чтобы рефакторизовать проект DDD для применения Clean Architecture.

Реализация

Сначала идея состоит в том, чтобы добавить папку useCase, где будут находиться все useCase, поэтому мы создадим папку customer, которая в данном контексте будет сущностью, и папку find, которая является useCase, который я буду реализовывать первым для customer, внутри этой папки мы создадим файл find.customer.dto.ts, который будет определять интерфейсы ввода и вывода данных для этого use case.

export interface InputFindCustomerDto {
  id: string;
}

export interface OutputFindCustomerDto {
  id: string;
  name: string;
  address: {
    street: string;
    city: string;
    number: string;
    zip: string;
  }
}
Войдите в полноэкранный режим Выход из полноэкранного режима

А затем мы переходим к реализации самого useCase, который получит в конструкторе интерфейс клиентского репозитория, чтобы он мог получить любую реализацию из этого репозитория.

export class FindCostumerUseCase{
  constructor(private customerRepository: CustomerRepositoryInterface){}

  async execute({id}: InputFindCustomerDto): Promise<OutputFindCustomerDto>{
    const customer = await this.customerRepository.find(id);

    return {
      id: customer.id,
      name: customer.name,
      address: {
        street: customer.address.street,
        number: customer.address.number,
        zip: customer.address.zip,
        city: customer.address.city
      }
    }
  }
Войдите в полноэкранный режим Выход из полноэкранного режима

В данном случае мне не нужно было форматировать данные для возврата в формате DTO, потому что по умолчанию они будут возвращены в этом формате, но я хотел сделать это таким образом больше из дидактических соображений и заставить себя не забывать.

Оцените статью
Procodings.ru
Добавить комментарий