2

我有一个由 12 个 Windows 服务组成的系统,比如 A、B ... M。它们仅通过队列(在本例中为 MSMQ)交换信息。该系统以线性方式工作 - 外部方调用 A,它在 B 使用的队列上发布消息。输出的格式是固定的,比如 AResult。B 读取 AResult,进行一些处理并将 BResult 发布到服务 C 等。

我现在遇到的问题是管道中的服务需要上一步未提供的数据。例如,服务 F 需要来自 BResult 的属性。

我考虑了一些替代方案,但它们都有缺点:

  1. 传递所有先前结果的字典。这样说 F 将能够读取 AResult、BResult 等。问题是这会引入高耦合,任何地方的任何更改都可能破坏其他服务。

  2. 拥有一个由不同服务填充的全局上帝对象。我之前做过类似的事情,结果非常复杂。

  3. 维护一个包含最有用数据的特殊对象,并将其传递给每个结果。例如 D 接收 CResult 和 GlobalContextData 并发布 DResult 和 GlobalContextData。问题是决定将其包含在上下文中并对其进行维护。

4

0 回答 0