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