我有一个Validator
带有一个方法签名的接口:public List<ParameterError> validateParameters(Parameters parameters);
各种类都实现了这个接口。
还有一些常用的方法,如isInteger
,isInRange
等。我应该将这些方法放在 a 中ValidationHelper
并在实现接口的类中使用组合Validator
,还是应该创建Validator
一个抽象类,将这些方法放在那里并使用继承而不是组合?
我有一个Validator
带有一个方法签名的接口:public List<ParameterError> validateParameters(Parameters parameters);
各种类都实现了这个接口。
还有一些常用的方法,如isInteger
,isInRange
等。我应该将这些方法放在 a 中ValidationHelper
并在实现接口的类中使用组合Validator
,还是应该创建Validator
一个抽象类,将这些方法放在那里并使用继承而不是组合?
我假设isInteger
,isInRange
如果它们是通用实现的,甚至可以在 Validator 类之外使用。在这种情况下,它们应该进入一个单独的 util 类,并且应该简单地调用该类Utils
而不是ValidationHelper
. 类/方法应始终在您可以使用它们的最广泛的上下文中命名。
您的辅助方法是方法的良好候选者,static
因为它们是纯函数并且它们不应该是多态的。您应该使用实用程序类并将所有此类功能放入其中。这导致了最小的耦合:既不是组合,也不是继承;只是纯粹依赖于方法本身。
我更喜欢组合而不是继承,因为实现的类Validator
可能不一定共享is-a
关系。他们更有可能对Validator
接口提供的方法感兴趣。
此外,是否不可能isInteger
在接口中实现泛型(等)方法Validator
并标记final
?它们甚至可以static
按照这个问题的思路制作。