7

Liskov置換原則に違反するAPIを使用しています。これは、Exceptionを拡張する独自のExceptionタイプをスローしますが、基本クラスからの例外メッセージを新しいErrorCodeフィールドに入れ、独自の(役に立たない)メッセージをMessageフィールドに入れます。したがって、正しいメッセージを表示するには、例外をDerivedExceptionタイプにキャストし、ErrorCodeフィールドを使用する必要があります。例外オブジェクトとして扱うと、間違ったメッセージが表示されます。

これは文体レベルで私を苛立たせますが、回避するのは簡単です。DerivedExceptionをキャッチして、プログラマーが意図したとおりに使用できます。だから私の質問はこれです:リスコフの原則についての大したことは何ですか?原則に違反する階層を使用して人々が遭遇する可能性のある実際的な問題は何ですか?

4

2 に答える 2

8

実用的な例:

メソッドを持つロギングクラスがある場合LogException(Exception ex)、「実際の」メッセージではなく、役に立たないと思われるメッセージがログに記録されます。

logメソッドの説明は、「ログ例外メッセージ」から「ログ例外メッセージですが、役に立たないメッセージをログに記録する」に変更されます。

于 2011-08-04T08:12:12.743 に答える
1

関数Fは、タイプTのオブジェクトを必要とします。有効なTであると主張するオブジェクトを渡しますが、動作は異なります。つまり、Fが依存する可能性のあるTを保持するプロパティがありますが、オブジェクトはそれらを満たしていません。何が起こる可能性がありますか?ほとんど何でも。エラー、失敗、クラッシュ、あなたの家は全焼します。

于 2011-08-04T08:12:25.520 に答える