java - 重构遗留代码——接口(interface)实现java——使用非接口(interface)方法

标签 java oop design-patterns interface configuration

我正在重构一些遗留代码,并且陷入了困境。

有关代码库的一些上下文。 它是一个仪表板网站,可以配置为监视某些服务。 有两种使用模式。

  1. 静态:
    1. 需要监控的服务配置存储在只读数据存储中, 例如:文本、只读数据库。
    2. 启动服务在启动期间自动完成
    3. 指向动态启用新服务和编辑现有服务的超链接已关闭, 并且 Controller 不会加载页面。
  2. 动态:
    1. 需要监控的服务的配置存储在读写数据存储中, 例如:SQL、在线数据存储等。
    2. 引导服务是在引导页面启动后手动完成的。
    3. 指向动态加入新服务和编辑现有服务的超链接已打开并且 可达。

我想重构以下内容。

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

我现在有两个想法

  1. 将 putX、putY 移至接口(interface)中并在 StaticImpl 中保留空实现,即它们不执行任何操作
  2. 为 putX、putY 创建新接口(interface),并在静态模式下将 bean2 设为 null。

我想知道这些是否好,或者是否有其他方法可以重构它。

提前致谢。

最佳答案

bean2 一开始似乎是一个坏主意,因为它创建了对具体实现的依赖,违反了依赖倒置原则

将读/写操作组合到一个接口(interface)中违反了接口(interface)隔离原则,因为您的客户端依赖于一个操作而不依赖于另一个操作。

很明显,您需要第二个界面。

关于java - 重构遗留代码——接口(interface)实现java——使用非接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59678116/

相关文章:

java - 创建具有泛型 Enum 的 EnumMap

java - 更新的 DLL 导致 JNI 抛出 "Exception c0000005"

java - 在java中使用内部类扩展类(并且从一个类到另一个类时也扩展内部类)

java - Java中构造函数的调用

java - 模型类(在 MVC 中)应该使用静态方法还是实例方法?

design-patterns - 说装饰器比适配器更透明是什么意思?

java - 显示标签、分组和空行

JavaScript OOP 和 Chrome 扩展 api 中的异步方法

c# - 生成器模式 : What is the purpose of the Director?

oop - 有什么方法可以根据程序的当前状态在类上调用 'limit' 的方法吗?