如何解决公共界面中常见功能和“不那么常见”功能之间的分离?

问题描述 投票:0回答:1
class PictureList {
     void clear();
     void load(json);
     void clearAndLoad(json);
     void draw();
}

一般来说,

clear
需要在
load
之前调用。 仅创建
clearAndLoad
可以避免错误,并强制每次以正确的顺序连续调用两个函数。

但是该规则也有例外,因此

clean
load
保留在界面中,以应对仅需要调用一个的特定情况。

这使您可以保持控制并处理这些异常,如果出现错误,您可以集中精力使用

clean
load
(异常调用)

这很有效,但你的公共 API 现在很混乱。你有冗余,没有办法分辨什么是标准接口,哪个是“专家接口”。

同样在编程中,我们经常说“一个函数应该只做一件事”,在这种情况下,

clearAndLoad
打破了这个规则,但不会引入错误,因为输入
clear(); load(json);
比输入
clearAndLoad(json);

更容易出错

如何解决公共界面中常见功能和“不太常见”功能之间的分离?

design-patterns api-design public public-method
1个回答
0
投票

对您的描述的重构是,

PictureList
应始终支持
clear
load
,并且对于特定类型的
PictureList
,需要在
clear
之前调用
load

您可以通过使用基类

BasePictureList
来实现此功能,其中包含
PictureList
中除
clearAndLoad
之外的所有方法,并通过调用父级的
load
clear 来重写 
load
 方法的特定实现
连续:

public class BasePictureList {
     void clear() { // };
     void load(json) { // };
     void draw() { // };
}


public class SpecificPictureList extends BasePictureList {
   @Override
   public load(json) {
      super.clear();
      super.load(json);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.