我有一个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按照这个问题的思路制作。