相同功能的 2 个变体的设计模式

Design pattern for 2 varities of the same feature

全部,

我正在开发一项功能,该功能将在执行操作时使用 ftp 将日志写入文件服务器。请注意,只有在配置文件服务器时才会写入文件服务器。如果没有配置服务器,操作将退出并进入 return 状态。流程是这样的:

1.执行操作 2.如果文件服务器连接(检查数据库和ping),写日志 3. return

现在我想知道是否有针对此相同功能的设计模式,但是该功能的范围将根据是否完成某些配置而有所不同。对于这两种情况,我将非常感谢帮助:

  1. 静态 - 如果数据库配置在启动期间是一次 - 如在 post 启动时系统可以 "assume" 文件服务器是否存在基于从数据库读取

  2. 动态- 当系统启动时 运行,我可能会启动一个文件服务器并配置数据库。理想情况下,对于这种情况,系统应该检测文件服务器并开始向其写入日志,而不是被迫重新启动系统。

请求这方面的帮助。

谢谢

您的设计看起来违反了 Single Responsibility Principle。您正在纠结两个不同的问题:第一个问题是操作本身,第二个问题是将日志运送到一个中心位置。

考虑将您的组件分成两个更简单、独立的组件。其中之一执行业务操作并写入日志,比如写入本地文件,仅此而已。另一个组件检查本地文件系统上是否存在新日志并将它们复制到中央位置。

您没有提到您是否在使用现有的日志记录框架,例如 Log4J。如果没有,这可能是个好主意 - 如果您尝试推出自己的日志记录框架,您最终可能不得不处理额外的不可预见的复杂性,例如处理日志级别(INFO、DEBUG、ERROR 等) .

关于您的原始消息 - 我会考虑使用 Factory pattern - create a factory class that can internally check whether the file server is available, and return one of two different logger types - something like a ConsoleLogger and an FTPLogger. Make sure that both of these implement the same interface so that your calling code doesn't have to care about what type of logger it's using. Alternatively, you can also use a Decorator 来包装执行您的操作的对象 - 一旦它完成请求,让装饰器进行日志记录。

最后的评论 - 尽量避免在每次登录时检查文件服务器是否可用。每次日志调用都命中数据库可能会导致糟糕的性能,更不用说您必须确保日志记录方法中的错误(例如数据库锁)不会导致整个操作失败。