Проверяет понимание принципов выделения доменных сущностей и использования DTO для изоляции слоёв приложения.
Доменная сущность — это объект, который моделирует ключевое понятие бизнеса (например, Заказ, Клиент, Продукт) и содержит бизнес-логику: методы, инварианты, правила. DTO (Data Transfer Object) — это простой контейнер данных без поведения, предназначенный для передачи информации между слоями приложения (например, из контроллера в сервис или из сервиса в репозиторий).
Выделяйте сущности на основе анализа предметной области, а не структуры таблиц БД. Спросите: какие ключевые понятия есть в бизнесе? Какие у них атрибуты и поведение? Например, для интернет-магазина сущность Order должна содержать не только поля, но и методы типа calculateTotal() или addItem(). Избегайте анемичных моделей, где сущность — просто набор геттеров и сеттеров.
DTO решают проблему изоляции: они позволяют не раскрывать внутреннюю структуру доменных объектов наружу. Например, если вы измените доменную модель, DTO останется стабильным для клиентов API. Также DTO удобны для валидации входных данных и агрегации данных из нескольких источников.
// Доменная сущность
class Order {
constructor(items) {
this.items = items;
}
calculateTotal() {
return this.items.reduce((sum, item) => sum + item.price, 0);
}
}
// DTO для передачи данных
class OrderDTO {
constructor(order) {
this.id = order.id;
this.total = order.calculateTotal();
this.itemsCount = order.items.length;
}
}
// Использование в контроллере
app.get('/orders/:id', (req, res) => {
const order = orderRepository.findById(req.params.id);
res.json(new OrderDTO(order));
});Правильное выделение доменных сущностей и использование DTO помогает сохранить чистоту архитектуры, упрощает тестирование и делает систему устойчивой к изменениям внешних интерфейсов. Применяйте этот подход в проектах с чётким разделением слоёв, особенно при разработке API и микросервисов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию