一个只有一个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 class
到 implement
您的 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 以获得服务层的解释。
我正在编写特定 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 class
到 implement
您的 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 以获得服务层的解释。