等级制度违反了利斯科夫法则——那又怎样



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

现在,这在风格层面上让我很恼火,但很容易解决:我可以捕获DerivedException并按照程序员的意图使用它。所以我的问题是:利斯科夫原理有什么大不了的?人们在使用违反原则的等级制度时可能遇到的实际问题是什么?

一个实际的例子:

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

日志方法的描述将从"记录异常消息"更改为"记录异常消息,但有时记录无用消息"。

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

相关内容

最新更新