Перейти к содержанию

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.

Связь с функциональным программированием

К ФП данный антипаттерн не применим. Так как в ФП все данные являются иммутабельными, а инкапсуляция достигается при помощи системы модулей. Тип данных описывается в одном модуле вместе с функциями, которые с ним работают, и только эти функции умеют порождать объекты этого типа. Конструктор не импортируется из модуля. Таким образом создать новый экземпляр типа возможно только вызывая функции этого модуля.

Ссылки