DDD - анемичные и богатые доменные модели - PullRequest
0 голосов
/ 30 сентября 2019

Я прочитал книгу DDD Эрика Эвана, и он (вместе с Фаулером и другими), похоже, считает, что модели анемичных доменов являются анти-паттерном.

Так что я просто очень хотел получить представление об этомпроблема.

Кроме того, я действительно ищу несколько хороших (базовых) примеров богатой модели предметной области и преимуществ по сравнению с моделью анемичной предметной области, которую она предоставляет.

1 Ответ

0 голосов
/ 30 сентября 2019

Предположим, вы пишете некоторый код для решения сложной бизнес-задачи. Если у вас анемичная модель предметной области, чем

, то ваши объекты вряд ли будут иметь какое-либо поведение, делая их немного больше, чем мешки добытчиков и установщиков. [..] Вместо этого есть набор сервисных объектов, которые захватывают всю логику домена, выполняя все вычисления и обновляя объекты модели с результатами.

Очень простой пример доступен на Wiki :

Анемичный

class Box
{
    public int Height { get; set; }
    public int Width { get; set; }
}

Не анемичный

class Box
{
    public int Height { get; private set; }
    public int Width { get; private set; }

    public Box(int height, int width)
    {
        if (height <= 0) {
            throw new ArgumentOutOfRangeException(nameof(height));
        }
        if (width <= 0) {
            throw new ArgumentOutOfRangeException(nameof(width));
        }
        Height = height;
        Width = width;
    }

    public int Area()
    {
    return Height * Width;
    }
}

Вы также можетевзгляните на репозиторий IDDD_Samples на GitHub с примерами ограниченного контекста из книги «Реализация доменного дизайна» Вона Вернона. Там есть много хороших примеров.

Скрытие внутренних частей объекта защищает его целостность, не давая пользователям переводить внутренние данные компонента в недопустимое или несовместимое состояние. Если ваша бизнес-проблема сложна и у вас анемичная модель, ваш код быстро станет неуправляемым. Добавление новых функций даст вам головную боль и будет длиться дольше и дольше. Код будет нечитаем и не подлежит тестированию.

Также подробнее о модели анемичного домена на сайте Мартина Фаулера .

...