我正在重构一些遗留代码,并且陷入了困境。
有关代码库的一些上下文。 它是一个仪表板网站,可以配置为监视某些服务。 有两种使用模式。
- 静态:
- 需要监控的服务配置存储在只读数据存储中, 例如:文本、只读数据库。
- 启动服务在启动期间自动完成
- 指向动态启用新服务和编辑现有服务的超链接已关闭, 并且 Controller 不会加载页面。
- 动态:
- 需要监控的服务的配置存储在读写数据存储中, 例如:SQL、在线数据存储等。
- 引导服务是在引导页面启动后手动完成的。
- 指向动态加入新服务和编辑现有服务的超链接已打开并且 可达。
我想重构以下内容。
interface Interface {
def getX()
def getY()
}
class StaticImpl implements Interface {
@implement def getX(): some impl
@implement def getY(): some impl
}
class DynamicImpl extends StaticImpl {
def putX(x): some impl ( not in interface )
def putY(y): some impl ( not in interface )
}
@Bean
Interface bean1 = if dynamic: DynamicImpl() else: StaticImpl()
@Bean
DynamicImpl bean2 = DynamicImpl()
bean1 用于可在静态和动态模式下调用的 Activity
bean2 用于仅在动态模式下调用的 Activity
我现在有两个想法
- 将 putX、putY 移至接口(interface)中并在 StaticImpl 中保留空实现,即它们不执行任何操作
- 为 putX、putY 创建新接口(interface),并在静态模式下将 bean2 设为 null。
我想知道这些是否好,或者是否有其他方法可以重构它。
提前致谢。
最佳答案
bean2
一开始似乎是一个坏主意,因为它创建了对具体实现的依赖,违反了依赖倒置原则。
将读/写操作组合到一个接口(interface)中违反了接口(interface)隔离原则,因为您的客户端依赖于一个操作而不依赖于另一个操作。
很明显,您需要第二个界面。
关于java - 重构遗留代码——接口(interface)实现java——使用非接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59678116/