Я недавно внедрил принципы доменного управления, но у меня возникли некоторые проблемы при реализации ограниченного контекста и интеграции между контекстами и / или другими системами.
Например, возьмите следующие системы:
Система складирования / хранения
Объекты будут включать «Продукт», который будет иметь такие свойства, как «Количество», «Местоположение»
Система онлайн-заказов
Объекты будут включать «Order», «OrderLine» и «Basket». Будет ли у него также свой собственный объект Product, который будет иметь такие свойства, как «Цена»?
Одно четкое бизнес-правило для Системы заказов заключается в том, что заказ не может быть размещен для товара, которого нет в наличии, но эта информация находится в Системе хранения запасов. Насколько я понимаю, это несколько возможных способов реализации этого:
Когда заказ подтвержден, объект Order вызывает службу в системе учета запасов, чтобы проверить наличие достаточного запаса для каждого необходимого продукта. Однако что-то не так в отношении домена, вызывающего службу приложений другой системы, а также, если бы все системы делали это, это привело бы к тому, что все было тесно связано между собой.
Система заказов считывает данные из базы данных системы учета запасов: сущность Продукт в системе заказов сопоставляется с объединением таблицы продуктов в системе заказов и таблицы продуктов в системе хранения запасов, или сущность Продукт системы заказов содержит другую сущность, называемую StockKeepingProduct, которая имеет значения из системы хранения запасов. Это было бы легко выполнить проверку, но нужно было бы убедиться, что Система заказов никогда не записывает в базу данных Системы хранения запасов.
Количество запаса денормируется в базе данных Системы заказов, и всякий раз, когда запасы Системы хранения запасов изменяются, она отправляет сообщение Системе заказов для обновления своего запаса.
Возможно, в глубине души я знаю, что должен делать 3, но я не уверен, что мы достаточно готовы к обработке такого большого количества избыточных данных и возможных несоответствий. Что вы думаете по поводу 1 и 2? Или у вас есть другие предложения?