Anemic domain model
Анемичная доменная модель это паттерн написания кода при котором объекты в программе содержат только данные, а вся бизнес логика вынесена в отдельные классы-сервисы. Является противоположностью Rich domain model
Пример¶
public class OrderService {
public void addItemToOrder(Order order, OrderItem item) {
int sum = order.getTotal() + item.getPrice();
order.getItems().add(item);
order.setTotal(sum)
}
}
Связь с ООП¶
В ООП парадигме анемичная модель считается антипаттерном из за нарушения принципа инкапсуляции. Сами объекты не поддерживают целостность своего состояния. И знания о том, какое состояние объекта считать правильным расползается по всему коду.
Когда применять?¶
Хорошо подходит для модулей с простой бизнес логикой и для задач интеграции. Для сложной бизнес логики лучше выбрать Rich domain model.
Связь с функциональным программированием¶
К ФП данный антипаттерн не применим. Так как в ФП все данные являются иммутабельными, а инкапсуляция достигается при помощи системы модулей. Тип данных описывается в одном модуле вместе с функциями, которые с ним работают, и только эти функции умеют порождать объекты этого типа. Конструктор не импортируется из модуля. Таким образом создать новый экземпляр типа возможно только вызывая функции этого модуля.