Oop 重构遗留代码,用一个小的实现从一个巨大的接口中提取小的接口

Oop 重构遗留代码,用一个小的实现从一个巨大的接口中提取小的接口,oop,refactoring,Oop,Refactoring,我有一大块代码(遗留)知道如何连接到外部服务,比如说连接到skype并带来它的可用性,以及它这样做的方式(为了示例,这就是它的工作方式)。是 (假设示例中所有方法都必须是公共的,并且有人调用它们)。 现在有一段巨大的代码(调用上述所有方法的巨大遗留代码) 现在我需要与skype或其他服务同步,比如说它的Messenger B 然而,对于Messenger B,我不需要init、start、connect等,我只需要updateStatus方法 所以我想到了这个重构(我觉得还不太好,我会解释原因)

我有一大块代码(遗留)知道如何连接到外部服务,比如说连接到skype并带来它的可用性,以及它这样做的方式(为了示例,这就是它的工作方式)。是

(假设示例中所有方法都必须是公共的,并且有人调用它们)。 现在有一段巨大的代码(调用上述所有方法的巨大遗留代码)

现在我需要与skype或其他服务同步,比如说它的
Messenger B

然而,对于Messenger B,我不需要init、start、connect等,我只需要updateStatus方法

所以我想到了这个重构(我觉得还不太好,我会解释原因)

Interface: ExternalStatusFetcher
信息技术的方法:

.updateStatus
现在,遗留代码在许多地方调用上述.init.start.stop.connect方法,但是我需要添加的新Messenger Status UpdaterImpl只需要.updateStatus,我想重用skype实现的.updateStatus,因为我想重用代码

因此,我的局限性是:

  • 重用SkypeAvailabilityManager.java
  • 遗留代码调用。开始。停止…在代码中的许多地方,我不知道要改变什么,这是一个巨大的遗留
  • 我希望在我的代码中有一个共同的接口,这意味着我希望以相同的方式处理两个impl,但这样客户机要么调用所有方法,要么只调用其中的一部分,直到实际的implementation被初始化为止
  • 什么是它的好重构?
    如果我的容器类拥有一个包含所有方法的接口,这将很好,但是我的第二个实现并不需要所有的方法,所以我有点搞不清楚该怎么做。

    如果你不想更改调用代码,我会选择:

  • 创建一个包含所有方法的接口。这样,您就可以显式地声明代码中隐含的内容,即遗留软件和messenger之间的合同
  • 使
    Messenger B
    实现该接口,其中除了
    updateStatus
    之外的所有方法都是无操作的(即,空方法不做任何操作)
  • 如果要实现许多这样的messenger,可以创建一个抽象类来实现接口,其中所有方法都不是ops,然后为每个特定的messenger创建一个子类来覆盖相应的方法
  • IMHO这是一个很好的第一步,主要是因为它很好地捕获了当前的代码状态,非常清楚地说明了创建新messenger需要实现什么,并且可以作为以后重构遗留代码的基础


    HTH

    如果您不想更改呼叫代码,我会选择:

  • 创建一个包含所有方法的接口。这样,您就可以显式地声明代码中隐含的内容,即遗留软件和messenger之间的合同
  • 使
    Messenger B
    实现该接口,其中除了
    updateStatus
    之外的所有方法都是无操作的(即,空方法不做任何操作)
  • 如果要实现许多这样的messenger,可以创建一个抽象类来实现接口,其中所有方法都不是ops,然后为每个特定的messenger创建一个子类来覆盖相应的方法
  • IMHO这是一个很好的第一步,主要是因为它很好地捕获了当前的代码状态,非常清楚地说明了创建新messenger需要实现什么,并且可以作为以后重构遗留代码的基础

    .updateStatus