在这个例子中,我想我有大约4行代码可以用函数封装,而且这个函数肯定会用在同一层次结构中的其他类中.
我有以下选项来重用该代码:
>复制将函数粘贴到需要它的类中.
>为需要该函数的类创建一个基类并将其放在那里.
>创建一个包含函数的类,该函数通过DI传递到需要它的类中,或者只是类的成员. (看起来像是重大的过度杀伤力)
>创建一个静态实用程序类并将该方法放入其中.
我绝对不会做1或4.我过去会做2但是我试图继续保留组合而不是继承原则所以我倾向于4但是对于最有可能的东西似乎很多永远不要在层次结构之外使用,只有4行.我知道这是非常挑剔的,但我想弄清楚这样做的正确方法.
解决方法
创建继承是有原因的.它被过度使用这一事实并不意味着它没有合法用途.关键是你是否使用它不应该取决于你是否能够轻松地重用它,而是根据你的基类代表什么来使它属于基类是有意义的.
如果没有更好地理解您的类是什么,以及您尝试重用的方法是什么,我不能在您的特定情况下提供具体建议.但是这样想一想:当你说它“很可能永远不会在层次结构之外使用”时,是因为它纯粹只是在那个层次结构之外没有意义吗?或者只是你不认为有人会构建碰巧使用这个功能的东西,即使它可以想象在层次结构之外有意义吗?
如果这个方法在您所讨论的特定层次结构之外有任何意义,我会建议方法#3.
当然,所有这些都假定您的类层次结构首先是层次结构.另一种常见的继承滥用是当人们在不应该在其应用程序的上下文中分层的对象强制层次结构时.