Ben*_*Ben 2 java design-patterns
我的应用程序有一个带有静态方法的实用程序类,它负责显示通知,并可选择在发生错误时发送电子邮件:
public static void sendEvent(final String description, final String name) {
....
SmtpParms smtpParams = readSmtpParms();
....
}
private static SmtpParms readSmtpParms() {
// read from properties file
....
}
Run Code Online (Sandbox Code Playgroud)
我们的代码库在两个应用程序之间共享.应用程序A从属性文件中读取SMTP参数.我主要在应用程序B上工作.应用程序B没有使用此电子邮件功能,但仍在调用我们的GUI上显示事件通知.现在,应用程序B需要从数据库中读取SMTP参数.
我想重用现有代码,但由于这些方法是静态的,我不能只是将这个实用程序类子类化,并将所有Application B代码指向子类.这个实用程序在多个JAR中引用,我更喜欢一个尽可能少地改变代码的解决方案.
我想如果我可以readSmtpParms分成一个单独的课程,那可能会有所帮助.但我想不出一种方法将源(属性文件与数据库)传递给实用程序类实例而不更改方法签名sendEvent.我想另一种方法是创建另一种方法,sendEventUsingDatabase但我仍然需要更新sendEvent应用程序B代码中的所有引用.
有没有一个解决方案不会改变原始代码,但也不会重复代码?此代码是否与设计模式或反模式匹配?谢谢.
静态实用程序方法不适合"发送电子邮件"情况.
我建议你将代码重构为一个可以正确实例化的类,并将电子邮件配置参数作为输入.
为了确保不破坏现有代码,然后重命名该类并将其与包含用于从属性文件中读取配置的代码一起包装在具有原始名称的类中.
现在您有一个可以使用的类,并从db中重新加载配置,以及一个符合遗留代码中使用的静态实用程序方法签名的包装器.