假设我们有一种方法可以发送具有消息状态级别的电子邮件:
void sendEmail(Level level, String message) {
...
}
级别可以是三种类型:
enum Level {
Info,
Warn,
Error
}
除了发送电子邮件本身,我们希望使用标准记录器记录消息,但我们也希望尊重消息级别,因此
Info
我们要使用的级别
INFO
记录器级别等。
我有一个观点,我们不应该在里面登录
sendEmail
,因为方法本身是“通用的”,而在内部它执行“特定的行为”:
void sendEmail(Level level, String message) {
switch (level) {
case Info: LOGGER.info("Sending message {}", message); break;
...
}
}
但在调用此方法时,应在外部进行日志记录,例如:
LOGGER.error("Sending message: {}", message);
sendEmail(Level.Error, message);
...
LOGGER.warn("Sending message: {}", message);
sendEmail(Level.Warn, message);
也要知道
level
不仅用于日志记录,还用于电子邮件内容内部。还考虑到示例非常简单:记录器的实际消息要复杂得多,包含封闭方法的其他几个参数。
处于温和的地位,我认为这两种方法是平等的。如果严格一点,我会说建议的方法有很多日志调用,其中日志消息总是相同的(!)是纯代码复制。
有什么利弊吗?以“基于意见”结尾对我来说也很好,因为这意味着我的“温和”立场也是正确的。