我有一个 4 层系统(数据库、持久性、业务、演示)。后 3 层都在一个 JVM 中运行。
我在业务层和表示层之间遇到了一些异常处理问题。将以下代码视为一个非常简化的示例:
public void process(String label) throws ValidationException {
if(label == null) {
// this is a custom exception that means that one of the arguments invalid
throw new ValidationException("The label can not be null.");
}
if(label.length() != 8) {
throw new ValidationException("The label has to be 8 letters long.");
}
... process ...
}
这里的问题是商业轮胎不知道无效的论点是演示的错还是用户的错。
- 假设标签是由用户提供的,那么这是用户的错,并且演示文稿必须显示“验证失败”消息以及验证异常的消息。
- 另一方面,如果标签是由演示文稿为用户生成的,那么这是演示文稿的错误(可能是错误),并且演示文稿必须显示“内部错误”消息。
- 此外,如果标签为空,这 100% 是演示文稿的错误。
当传递用户生成的和演示生成的参数的混合时,问题就出现了。在这种情况下,演示文稿无法知道是什么导致了异常。它唯一得到的就是向用户显示详细的消息(因为如果是用户的错,用户就会知道原因)。但是,向用户显示详细的错误消息是不可接受的,因为这是演示文稿的错,因为它只会使用户感到困惑。
在这种情况下我应该如何处理异常?有什么模式可以使用吗?