7

我使用的 API 违反了 Liskov 替换原则:它抛出了自己的扩展 Exception 的 Exception 类型,但将来自基类的异常消息放在新的 ErrorCode 字段中,并将自己的(无用的)消息放在 Message 字段中。因此,要显示正确的消息,我需要将异常转换为 DerivedException 类型并使用 ErrorCode 字段。如果我将其视为异常对象,则会收到错误消息。

现在这在风格上让我感到厌烦,但它很容易解决:我可以捕获 DerivedException 并按照程序员的意图使用它。所以我的问题是:Liskov 原则有什么大不了的?人们使用违反原则的层次结构可能会遇到哪些实际问题?

4

2 回答 2

8

一个实际的例子:

如果您有一个带有方法的日志记录类,LogException(Exception ex)它将记录您认为无用的消息,而不是“真实”消息。

log 方法的描述将从“记录异常消息”更改为“记录异常消息,但有时记录无用消息”。

于 2011-08-04T08:12:12.743 回答
1

函数 F 想要一个 T 类型的对象,你传递给它一些声称是有效 T 的东西,但随后表现不同;即,有些属性适用于 T,F 可能依赖于这些属性,但您的对象不满足它们。会发生什么?几乎任何东西。错误、失败、崩溃,你的房子被烧毁了。

于 2011-08-04T08:12:25.520 回答