gpt4 book ai didi

java - 日志应该多深?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:32:35 24 4
gpt4 key购买 nike

要描绘场景,请考虑以下逻辑省略服务

public class Service {
private Validator validator;

public void submit(Foo foo) {
if (!validator.isValid(foo)) {
log.warn("invalid foo");
} ...
}
}
public interface Validator {
boolean isValid(Foo foo);
}

问题是只有 Validor 本身知道验证失败的原因。我只看到两种可行的方法来调整原因 validator

  • 记录失败条件本身
  • 返回一个包含字符串 reason 和 boolean 值 isValid 的复杂对象。

前者很好,但会让 Service 对是否实际执行日志记录一无所知,而后者引入了烦人的冗余和更复杂的用法。

哪个是首选,或者有更好的方法吗?

最佳答案

你要问自己一个问题:你的客户关心验证失败的原因吗?答案是:视情况而定。在许多情况下,您希望准确地告知最终用户验证失败的原因。在那种情况下返回“复杂”验证结果对象(不要在这里使用异常!),本质上是包装字符串或代码的集合(以允许 )。 ValidationResult 对象将是一个业务对象,而不是某个二等助手。

在其他情况下,您只想根据对象是否有效做出决定。调用代码(客户端)根本不关心验证的内部逻辑。它要么有效,要么无效。然后直接使用 boolean 方法。出于调试目的,在验证方法中添加日志记录。根据您的需要打开/关闭它们。

你知道最好的部分是什么吗?您可以有两种方法,并使用更适合客户端代码的方法。显然,不太复杂的 boolean 方法只会委托(delegate)给更复杂的方法并提供更简单的 View :

boolean isValid(Foo foo) {
validate(foo).isValid();
}

ValidationResult validate(Foo foo) {
//logging and "real" validation
}

关于java - 日志应该多深?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com