TaskエンティティのリストとProjectTaskサブタイプがあるとします。タスクはいつでも閉じることができますが、タスクのProjectTasksステータスが[開始済み]になると閉じることができません。UIは、開始済みを閉じるオプションがProjectTask使用できないことを確認する必要がありますが、ドメインにはいくつかの保護手段があります。
public class Task
{
     public Status Status { get; set; }
     public virtual void Close()
     {
         Status = Status.Closed;
     }
}
public class ProjectTask : Task
{
     public override void Close()
     {
          if (Status == Status.Started) 
              throw new Exception("Cannot close a started Project Task");
          base.Close();
     }
}これClose()で、タスクを呼び出すときに、開始タスクのProjectTask状態の場合は呼び出しが失敗する可能性がありますが、ベースのタスクの場合は失敗しません。しかし、これはビジネス要件です。失敗するはずです。これは、リスコフ代替原理の違反とみなすことができますか?
public Status Status { get; private set; }ます。それ以外の場合、Close()メソッドは回避できます。
                Task多相コードに奇妙な非互換性を導入しないようにすることTaskは、大したことです。LSPは気まぐれではありませんが、大規模システムの保守性を高めるために正確に導入されました。
                TaskCloserプロセスがあると想像してくださいclosesAllTasks(tasks)。このプロセスは明らかに例外をキャッチしようとしません。結局のところ、それはの明示的な契約の一部ではありませんTask.Close()。これでProjectTask、突然TaskCloser(おそらく未処理の)例外がスローされ始めます。これは大したことです!