0

我们正在连接到描述一些 Stock Tase 信息的不同服务。目前提供三种服务。每个服务以不同的方式返回信息:XML、Json、管道分隔的字符串。服务的数量在不久的将来可能会增加。

我想以最灵活的方式实现这一点,并具有最大的抽象性。唯一的模式(我熟悉的模式)是工厂模式或抽象工厂。也许甚至策略模式也是一种选择。

也许您可以提出更好的实施方式?

概括:

StockInformationParser 
-> Connects to Service 1 || Service 2 || or Service N 
-> Parses and analyses information
-> returns StockInformationInfo. 
4

3 回答 3

2

关于你的情况,我建议你应该应用更多的设计模式,它应该结合在一起来解决你的问题,如下所示: 1. 外观模式:它作为一个接触点类来减少连接多个服务时的复杂性。

  1. 对于每个返回每个服务的结果,您可能需要一个具有相同方法但每种格式的解析引擎 Json、Xml、rss、...相同的方法但不同的格式,因此您应该应用策略模式来解决。

  2. 每个服务都需要一个方案工厂来连接,因此抽象工厂或工厂设计模式是合适的。

  3. 最后一件事,您将希望结果是易于更改或扩展的抽象,稍后您可以在此处应用代理模式。

希望这有帮助。

于 2013-04-24T08:09:36.653 回答
2

我会有一点不同的方法。如何创建一个数据库并用这些服务填充它,然后您可以轻松地在最喜欢的 SQL 中查询数据库并使用 Group By、Order 和 Joins。

优点是,

  • 无需重新发明查询适配器,毕竟您需要查询。
  • 无需担心不同的格式,一旦获取的数据在数据库中保持为行。
  • 改进的缓存在服务失败或连接问题的情况下,您仍然可以看到过去的数据。
于 2013-04-24T08:21:43.670 回答
2

我假设所有这些外部服务最终都映射到同一个域模型。

在这种情况下,您可以:

  • 创建一个内部服务,其操作可由您的客户端使用,并为这些客户端优化数据合约。
  • 内部服务使用底层存储库和域模型。
  • 存储库负责抽象检索数据的方式。在内部,他们从外部提供者那里获取数据并将这些数据映射到您的域对象。您可以为每个外部服务编写一个提供程序并在您的存储库中使用它们。如果添加了外部服务,您只需添加一个新的提供者并将其添加到存储库逻辑中。

我个人喜欢 IoC,所以我会为每个组件创建接口并注入具体实例;这使得它更加灵活和可测试。

于 2013-04-24T08:28:20.973 回答