建议通用服务的体系结构模式

时间:2013-04-24 08:00:31

标签: c# design-patterns

我们正在连接描述某些Stock Tase信息的不同服务。 目前有三种服务。每个服务以不同的方式返回信息:XML,Json,Pipe分隔的字符串。服务数量可能在不久的将来增长。

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

也许你可以建议更好的实施方式?

要点:

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

3 个答案:

答案 0 :(得分:2)

关于您的情况,我建议您应该应用更多的设计模式,它应该结合在一起以解决您的问题,如下所示: 1. Facade模式:它可以作为一个联系点类来降低连接多个服务时的复杂性。

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

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

  3. 最后一件事,你会想要结果是抽象易于改变或以后你可以在这里应用代理模式。

  4. 希望得到这个帮助。

答案 1 :(得分:2)

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

优点是,

  • 毕竟您需要查询,无需重新发明查询适配器。
  • 一旦获取的数据保持为行,无需担心不同的格式 在数据库中。
  • 改进的缓存如果服务失败或连接问题,您仍然可以看到过去的数据。

答案 2 :(得分:2)

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

在这种情况下,您可以:

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

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