我正在考虑为一组服务提供 SOA 架构,以支持我咨询的业务,以前我们使用数据库集成,每个应用程序从共享的 MS SQL 数据库中挑选出它需要的内容并使用它等等。我们有各种与怪物数据库(包括 java、.net 和 microsoft access)集成的应用程序具有引用完整性,因为一切都紧密耦合。
我对如何支持服务之间的数据共享有点困惑。
让我们以产品服务为例,它位于批发商每月提供的产品数据库之上。我们建立了一个领域模型,并使用 Hibernate 或其他任何方式将其放在数据库中,实施明智的产品是一个大型对象图,给出了批发商提供的有关产品的信息。
现在假设 Review 服务、Pricing Service、Shipping Service 和 Stock Service 将订阅 ProductUpdated、ProductAdded、ProductDeleted。问题是每个服务只需要关于产品的部分或部分信息。运输可能只需要尺寸和重量。定价可能只需要产品 ID、批发成本、批量折扣、迄今为止有效的价格。审核可能需要产品 ID、产品名称、生产者。
仅发布整个产品(合适的非特定于订阅者的合同,例如 ProductUpdated 和合适的模式 - 代表所有产品对象图)并让订阅者将他们需要的任何内容映射到他们的域模型(或者做他们想做的事)是标准做法吗?想要,甚至可能没有域模型)...
或者当我写这篇文章时,我在想也许:
产品服务发布 ProductAdded 消息(不包括产品详细信息,仅包含产品 ID 和时间戳)
Pricing Service 订阅 ProductAdded 并发布 RequestPricingForProduct 消息
产品服务发布 ResultForPricingForProduct 消息
嗯..似乎好一点...但感觉就像我正在根据我可以识别的其他服务以及他们将需要什么来建立产品服务合同,也许将来 XYZ 服务需要不同的东西。我将停在那里,因为我认为我感到困惑的地方越来越清楚......也许上面的方法会起作用,因为我应该公开一种方法来返回应该公开的任何内容嗯嗯。
非常感谢任何意见或方向。对不起,如果这看起来半生不熟。