可以将只有一个公共无效方法的类称为“服务”吗?

时间:2018-06-26 06:38:48

标签: java naming-conventions

我正在编写特定 Validator 接口的实现。它的设计应确保在验证失败时会引发特定异常。我无法更改此设计。

每个实现都以不同的方式从输入数据集中获取验证输入,并验证不同数量的数据集。但是,对于每个验证输入,实际的验证代码是相同的。 这就是为什么我决定用 validate 方法编写一个类来放置此通用代码,并在需要时从每个 Validator 实现中调用它的原因。 该类是这样的:

public class SpecificValidationService {

    public void validate (Condition condition1, Condition condition2) {
        if (conditionNotMet(condition1, condition2)) {
            throw new SpecificException();
        }
    }
}

问题在于,拥有仅具有一个公共方法(无效)的服务对我来说似乎是错误的。通常,我希望服务具有一些无效的方法。 我在这里吗?什么叫更好的名字?请记住,我不能使用“验证器”,因为它可能与 Validator 实现混淆。还是我的方法完全错误?

2 个答案:

答案 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来进行验证,并且您希望至少实现一个方法。这意味着您需要interfaceabstract 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