一个只有一个public void 方法的class 可以被称为'service' 吗?

Can a class that has only one public void method be called 'service'?

我正在编写特定 Validator 接口的实现。它的设计方式是预期在验证失败时抛出特定异常。我无法更改此设计。

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

public class SpecificValidationService {

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

问题是只有一个 public 方法(无效)的服务对我来说似乎是错误的。通常我希望服务有一些不是无效的方法。 我在这里吗?应该取什么更好的名字?请记住,我不能使用 'validator',因为它可能会与 Validator 实现混淆。或者我的方法完全错误?

首先让我们澄清一下,void 方法绝对没有错,class 本身只有 void 个方法也绝对没有错。

是否应该避免只有 void 方法的 classes 的问题是错误的。关于你的计划或你的 class 你应该问自己的问题如下所示:

这个class符合我的要求吗?

如果答案是肯定的,那么它是否只有void方法并不重要。如果答案是否定的,您需要问自己下一个问题:

如果这个 class 符合我的要求,它会是什么样子?它应该是什么样子和实际是什么样子有什么区别?

既然你现在问的是好问题,你将有更高的机会找到好答案。

我知道您需要一个 interface 来进行验证,并且您希望至少实现一个方法。这意味着您需要 abstract classimplement 您的 interface.

public abstract class AbstractValidator implements Validator {
    public void validate (Condition condition1, Condition condition2) {
        if (conditionNotMet(condition1, condition2)) {
            throw new SpecificException();
        }
    }
}

然后对于每个特定的验证器,继承自 AbstractValidator。此外,在 Validator 记录它不打算由 AbstractValidator 以外的任何其他人实施,因此可能会发现您的 interface 的其他人不会犯单独实施它的错误。

https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

没有服务的具体定义class。事实上,一项服务在不同 languages/frameworks 中可能意味着不同的事物。在Java中,通常任何实现了一些业务逻辑的class都可以称为服务。具有单个 void 函数的服务没有任何问题。然而,SpecificValidationService class 在我看来更像是一个实用程序 class 并且可以保留在服务层中。在这种情况下,您可以将其称为 SpecificValidationUtility。

我想分享这个答案https://softwareengineering.stackexchange.com/a/343213 以获得服务层的解释。