我正在编写特定 Validator 接口的实现。它的设计应确保在验证失败时会引发特定异常。我无法更改此设计。
每个实现都以不同的方式从输入数据集中获取验证输入,并验证不同数量的数据集。但是,对于每个验证输入,实际的验证代码是相同的。 这就是为什么我决定用 validate 方法编写一个类来放置此通用代码,并在需要时从每个 Validator 实现中调用它的原因。 该类是这样的:
public class SpecificValidationService {
public void validate (Condition condition1, Condition condition2) {
if (conditionNotMet(condition1, condition2)) {
throw new SpecificException();
}
}
}
问题在于,拥有仅具有一个公共方法(无效)的服务对我来说似乎是错误的。通常,我希望服务具有一些无效的方法。 我在这里吗?什么叫更好的名字?请记住,我不能使用“验证器”,因为它可能与 Validator 实现混淆。还是我的方法完全错误?
答案 0 :(得分:1)
没有服务类的具体定义。在不同的语言/框架下,服务的实际意义可能不同。在Java中,通常将实现某些业务逻辑的任何类称为服务。具有单个void函数的服务没有任何问题。但是,SpecificValidationService类在我看来更像是一个实用程序类,可以保留在服务层中。在这种情况下,您可以将其称为SpecificValidationUtility。
我想分享这个答案https://softwareengineering.stackexchange.com/a/343213,以获取有关服务层的解释。
答案 1 :(得分:0)
首先让我们澄清一下,(this.DataContext as ButtonEnableViewModel).IsEnable = false;
方法绝对没有问题,而仅具有void
方法的类绝对没有问题。
错误地提出了一个问题,即是否应避免仅使用void
方法的类。您应该问自己有关您的计划或void
的计划的问题看起来像这样:
这堂课符合我的要求吗?
如果答案为是,那么是否只有class
方法就没有意义。如果答案是否定的,您将需要问自己下一个问题:
如果满足我的要求,这堂课会是什么样子?它应该是什么样与它之间有什么区别?
由于您现在正在问的是很好的问题,因此您有更高的机会找到好的答案。
我了解您需要void
来进行验证,并且您希望至少实现一个方法。这意味着您需要interface
到abstract class
的{{1}}。
implement
,然后对于每个特定的验证器,从interface
继承。另外,请在public abstract class AbstractValidator implements Validator {
public void validate (Condition condition1, Condition condition2) {
if (conditionNotMet(condition1, condition2)) {
throw new SpecificException();
}
}
}
处证明它不是由AbstractValidator
以外的任何其他方式实施,因此可能会发现您的Validator
的其他人不会犯单独实施该错误的错误。
https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html