最大限度地减少方法的耦合,同时仍保持其灵活性



我有一个方法,今天需要两个参数来完成计算。这两个参数在未来变为50的前景非常好。考虑到这一点,什么是好的?

  1. 立即编写func(int a, int b)。当参数超过7时,转换到下面的2或3
  2. 立即编写func(RootOfObjectGraphWith50Fields a)(RootOfObjectGraphWith50Fields用于代码库的其他部分(。这样,当需要更多参数时,方法签名就不需要更改。但这增加了耦合性(该方法需要了解更多信息才能完成其业务(
  3. 现在编写func(InterfaceWith50Fields a)(只有2个字段(,并让RootOfObjectGraphWith50Fields实现InterfaceWith50Fields。这样,方法签名就不必在每次需要新值来完成计算时都更改。该方法不耦合到整个RootOfObjectGraphWith50Fields,而仅耦合到它感兴趣的那些字段(用InterfaceWith50Fields表示(

除了推荐之外,我很欣赏推荐背后的基本设计原则。

我实际上要推荐选项1和选项3。我推荐第一个选项,因为如果您当前的要求是该方法采用2个参数,那么func(int a, int b)是完全合适的,至少现在是这样。如果以后这个方法需要50个参数,那么您总是可以向类中添加一个重载的func(InterfaceWith50Fields a)版本。

请注意,第三个选项比第二个选项提供的功能不多,只是它避免了更改方法签名。由于您传递的POJO实际上只存在于包装50个不同类型的字段中,因此任何实现类中的相关方法/行为都将是getter。由于接口通常对其实现类的数据一无所知,因此在从50个参数升级到51个参数时,您可能仍然需要重写一些代码。

相关内容

最新更新