Проверяет понимание правил взаимодействия между слоями в чистой архитектуре и использования моделей (DTO) для передачи данных.
В чистой архитектуре (Clean Architecture) взаимодействие между слоями строится на принципе инверсии зависимостей (Dependency Inversion Principle). Внутренние слои, содержащие бизнес-логику, не должны зависеть от внешних слоёв, таких как база данных, UI или фреймворки. Вместо этого внешние слои зависят от абстракций, определённых во внутренних слоях.
Для передачи данных между слоями используются специальные модели, часто называемые DTO (Data Transfer Object). Эти модели определяются во внутренних слоях и не содержат логики, только данные. Например, слой use case (приложения) может определить модель UserResponse, которая передаётся контроллеру (внешний слой). Контроллер затем может преобразовать её в формат, подходящий для HTTP-ответа.
// Внутренний слой (use case)
class UserResponse {
constructor(public id: string, public name: string) {}
}
// Внешний слой (контроллер)
class UserController {
constructor(private useCase: GetUserUseCase) {}
async handle(req: Request, res: Response) {
const user = await this.useCase.execute(req.params.id);
// UserResponse преобразуется в JSON
res.json({ id: user.id, name: user.name });
}
}Рассмотрим типичную структуру: слой сущностей (entities), слой use cases, слой адаптеров (controllers, presenters) и слой фреймворков (DB, UI). Данные передаются от внешнего слоя к внутреннему через DTO, которые определены на границе. Например, запрос от UI приходит в контроллер, который создаёт DTO и передаёт его в use case. Use case обрабатывает бизнес-логику и возвращает другой DTO обратно.
// Пример DTO для запроса
class CreateUserRequest {
constructor(public name: string, public email: string) {}
}
// Use case
class CreateUserUseCase {
execute(request: CreateUserRequest): UserResponse {
// бизнес-логика
return new UserResponse('123', request.name);
}
}Использование DTO и чёткое разделение слоёв позволяет легко заменять внешние компоненты (например, базу данных или фреймворк) без изменения бизнес-логики. Это делает систему гибкой, тестируемой и поддерживаемой, особенно в крупных проектах.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Python Developer в телеграм