2016-02-20 6 views
-3

В genral e-commerse applications определяют «Продукт» как объект объекта/значения, основанный на его контексте. Вот мой проблемный контекст, мое приложение является заказным порталом для телекоммуникационных сервисов, который предлагает Voice, TV, Internet. Каждая функция/услуга определяется как продукт в каталоге. Например, скорость, маршрутизаторы, голосовые планы, параметры списка каталогов, видеопакеты, каналы, сетчатая коробка, плата за установку, параметры доставки и т. Д. Все это определяется как продукты с точки зрения каталога. Но все имеет свою природу и поведение. Эти поведения отображаются через атрибуты продукта. Например, чтобы проверить, поддерживает ли выбранный маршрутизатор заданную скорость, продукт маршрутизатора может иметь индикаторы, такие как «совместимые скорости» в своем поле «Ключевые слова». Аналогично, каналы, варианты доставки и т. Д. Будут иметь свое поведение как ключевые слова на уровне продукта. Некоторые из них обрабатываются в коде. При проектировании, если «Продукт» рассматривается как модель genralized domain, нецелесообразно определять все разные поведения в одном объекте. Если я создам разные объекты, такие как Speed, Channel, Router, DeliveryMethod и т. Д., У меня будет много моделей. Более того, у меня есть правила из каталога, которые скажут, какие продукты могут собираться вместе, а какие нет, которые должны быть автоматически добавлены на основе другого продукта и т. Д. Все эти правила определяются идентификаторами продуктов. Учитывайте все это, как должна быть разработана модель продукта?Является «продуктом» объекта домена в DDD

ответ

2

Эти модели поведения подвергаются через атрибуты продукта ...

Те не походят поведения. Это звучит как свойства, которые другие сущности используют в своем поведении.

Например:

У меня есть правила из каталога, который будет сказать, какие продукты могут идти вместе, что не может, который должен быть автоматически добавлены на основе другого продукта

Правила - бизнес-инвариант - это сердце агрегатов в модели домена. Поэтому, когда вы говорите, что у вас есть эти правила; какой объект в вашей модели отвечает за соблюдение этих правил? Какой объект в вашей модели изменяется, когда правила выполняются?

Это интересный бит. У вас есть какая-то модель (договор купли-продажи?), В которой есть продукты, добавленные к ней, и когда эти продукты добавляются, необходимо проверить, чтобы все ограничения были удовлетворены. Проверка противопоказаний - это, как правило, запрос, и обычным способом запуска запроса при изменении агрегата является передача в службе домена, которая знает, как - например, - ходить по графику зависимости продукта.

Для того чтобы продукт был «интересным» в этом же смысле, он действительно должен защищать свое собственное состояние от недействительности. Вы не ожидали бы, что Продукт будет запрещать писать недействительный договор купли-продажи, потому что это контракт на продажу. Продукт должен отвечать за предотвращение несогласованных внутренних изменений.

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

Смежные вопросы