Вопрос проверяет понимание различий между богатой и анемичной доменными моделями, что важно для проектирования бизнес-логики в ООП-приложениях.
Доменная модель — это представление бизнес-сущностей и правил предметной области в коде. В зависимости от того, где находится бизнес-логика, выделяют два подхода: анемичная (anemic) и богатая (rich) модели.
В анемичной модели классы содержат только поля и методы доступа (getters/setters), а вся бизнес-логика вынесена в отдельные сервисы. Это напоминает процедурное программирование: данные отдельно, поведение отдельно.
class Order {
private items: Item[];
private total: number;
// только геттеры и сеттеры
}
class OrderService {
calculateTotal(order: Order): number {
return order.getItems().reduce((sum, i) => sum + i.price, 0);
}
}
Плюсы: простота, легкость маппинга на БД, знакомо большинству разработчиков. Минусы: бизнес-правила размазаны по сервисам, сложно гарантировать инварианты, дублирование логики.
В богатой модели данные и поведение объединены в доменных объектах. Объект сам следит за своими инвариантами и предоставляет методы, выражающие бизнес-операции.
class Order {
private items: Item[] = [];
addItem(item: Item): void {
if (item.price <= 0) throw new Error('Invalid price');
this.items.push(item);
}
getTotal(): number {
return this.items.reduce((sum, i) => sum + i.price, 0);
}
}
Плюсы: инкапсуляция, единая точка правды для правил, код ближе к языку предметной области. Минусы: сложнее маппинг на реляционные БД, требуется больше дисциплины.
Итог: выбирайте rich domain model, когда бизнес-правила сложны и важны инварианты; anemic оправдана в простых приложениях, где основная работа — это сохранение и отображение данных.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
Java
Spring
Ключевые слова
Подпишись на Node.js Developer в телеграм