支持将数据从多个源传输到目的地的设计模式

问题描述 投票:0回答:1

我正在开发一个小程序 - 该程序的主要功能是将“数据”从一个“地方”“传输”到另一个“地方”,并将统计信息(如时间戳、成功与否等)记录到 sqlite 数据库。此外,如果传输失败,程序应该能够重试几次。

目前,“数据”、“地点”和“传输”的假设很简单:

  • 数据只能是主机中的文件
  • 目的地可以是主机中的位置或远程服务器
  • 传输数据的方式只能是‘rsync’(在主机中使用rsync命令)

我有两个主要问题:

  1. 如果该程序将来可能扩展,那么该程序的合适设计模式是什么?传输数据的方法可能有更多,例如ftp、云服务器命令行工具等。程序可能需要处理数据是否为目录(在这种情况下,它将把整个目录传输到目的地)。它记录统计数据的数据库可以是其他类型,如 mysql 或 postgres。
  2. “将统计数据记录到sqlite db”应该如何与传输功能相关?是不是分开比较好?
design-patterns file-transfer
1个回答
0
投票

如果我的理解是正确的,那么您希望将系统设计为对新功能开放,例如新的传输方法和数据类型。

要实现所有的传输方法,您应该公开一个接口来定义传输服务。该接口在您的设计中发挥着重要作用,并且应该简单以将实现细节与客户的需求分开。例如,不要在接口定义中包含凭据信息。将其保留在具体类中并将信息注入构造函数中。

您所有的转账方法都必须实现 ITransferService 接口(它们将是策略模式中的策略)

最好使用命令模式来处理传输。例如,使用命令类来表达接口方法的输入参数。

最好使用工厂模式来选择使用哪种传输服务。

为了支持未来的数据类型,您应该使用复合模式来定义数据结构。

所有这些建议都可以帮助您遵守 SOLID 原则,尤其是开闭原则。这种设计使软件易于更改和添加新功能。

© www.soinside.com 2019 - 2024. All rights reserved.