Я рассматриваю архитектуру SOA для набора серверов для поддержки бизнеса, для которого я консультирую, ранее мы использовали интеграцию с базой данных, где каждое приложение выбирало то, что ему нужно, из общей базы данных MS SQL и работало с ней и т. д. У нас были различные приложений, интегрированных с базой данных монстров, включая доступ к Java, .net и Microsoft, была ссылочная целостность, поскольку все было тесно связано.
Я немного запутался в том, как поддерживать обмен данными между службами.
Возьмем Product Service, который находится поверх базы данных Product, ежемесячно предоставляемой оптовым продавцом. Мы строим модель предметной области и размещаем ее в базе данных с помощью Hibernate или чего-то еще, с точки зрения внедрения. Продукт — это большой граф объектов с учетом информации, предоставленной оптовым продавцом о продукте.
Теперь предположим, что служба обзора, служба ценообразования, служба доставки и служба запасов подпишутся на ProductUpdated, ProductAdded, ProductDeleted. Проблема в том, что каждому сервису нужна только часть или несколько частей информации о Товаре. Для доставки могут потребоваться только размеры и вес. Для ценообразования может потребоваться только идентификатор продукта, оптовая стоимость, скидка за объем и цена, действующая на сегодняшний день. Для обзора может потребоваться идентификатор продукта, название продукта, производитель.
Является ли стандартной практикой просто публиковать весь продукт (подходящие контракты, не относящиеся к подписчикам, например, ProductUpdated, и подходящую схему, представляющую весь граф объектов продукта) и позволять подписчикам сопоставлять все, что им нужно, со своими моделями предметной области (или, черт возьми, делать то, что они хотят). хочу с, может даже не иметь модели предметной области)...
Или, когда я пишу это, я думаю, может быть:
Product Service Публикует сообщение ProductAdded (не содержит сведений о продукте, только идентификатор продукта и, возможно, отметку времени)
Служба ценообразования подписывается на ProductAdded и публикует сообщение RequestPricingForProduct.
Служба продукта публикует сообщение ResultForPricingForProduct
Хм... кажется, немного лучше... но мне кажется, что я строю контракт на обслуживание продукта, основываясь на том, какие другие услуги я могу определить и что им понадобится, возможно, в будущем XYZ Service потребует чего-то другого. Я собираюсь остановиться на этом, так как я думаю, что становится яснее, где я запутался ... возможно, вышеизложенное сработает, потому что я должен показать способ вернуть все, что должно быть общедоступным, хммм правильно.
Любые комментарии или направления с благодарностью. Извините, если это кажется наполовину испеченным.