用于从不同来源读取数据并将其发送到不同目的地的系统的 OOP 设计

Kar*_*zin 5 java oop design-patterns factory-pattern observer-pattern

我正在编写一个 java 软件,它就像一个中间件,用于从不同来源收集数据,然后处理数据并将其发送到不同的目的地。

数据源和目的地包括:文件、数据库、TCP、HTTP。

用户将能够创建一个通道,每个通道将有一个数据源(文件读取器、数据库读取器、tcp 侦听器)和一个或多个数据目的地(文件写入器、数据库写入器、tcp 发送器)。

渠道图

该应用程序将按以下方式工作:

  1. 从数据库中读取频道。
  2. 为每个通道创建数据源及其目标。
  3. 启动数据源读取数据。

我想到的是:

  • 源和目的地表示如下: 在此处输入图片说明
  • 通道是一个容器,将由源和目标列表注入。所以通道就像一个门面模式
  • 通道中的数据处理器将使用观察者模式连接到目的地
  • 在运行时,当应用程序从数据库加载频道列表时,我将使用工厂模式来创建源和目标。

那么,这是代表渠道、来源和目的地的最佳方式吗?我认为源和目标有相似之处,例如,FileReader 和 FileWriter 类将相同,只是一个用于读取,另一个用于写入,将它们中的每一个表示为一个单独的类是否好?

Aug*_*sto 0

看起来还不错。如果您查看一些集成框架,例如 Camel 或 Spring Integration,您会发现它们具有非常相似的东西。它们还有不同类型的通道(p2p 异步、p2p 同步和发布-订阅)和转换器。我提到这两个非常成熟的框架,以防你想使用它们而不是编写自己的框架(我强烈建议你看看 Camel,因为它可能提供你想要的东西)。

关于读者/作家的问题,我认为最好将它们保留为单独的类,否则可能会造成混乱(这个类被用作读者还是作家?)并且可以防止错误(有人配置读者,但是作为作家注入它)。

您可能希望使用在读取器和写入器(或委托)之间共享的实用程序类来避免重复代码。