Ограничения и подводные камни
Всем принципам приходится сталкиваться с реальностью, которая накладывает ограничения на их применение. Для LSP наиболее характерны дороговизна изменения модели иерархии, многословность контрактов, предел выделения суперкласса.
Изменение иерархии дорого
LSP помогает проектировать отношения между сущностями, учитывая возможные изменения в требованиях. Но вероятность спроектировать систему хорошо с первого раза — низкая.
Стремление следовать LSP может привести к изменению иерархии объектов в системе. Большие изменения в структурах — дороги, как по времени, так и по деньгам.
Также изменение структуры затрагивает большое количество компонентов. Если код плохо покрыт тестами, переписывание может привести к неработающему приложению.
Использование контрактов ресурсозатратно
Использование контрактов позволяет избежать усиления предусловий и ослабления постусловий. Однако, контракт увеличивает сложность проекта, а также увеличивает сроки разработки.
Покрытие методов контрактными спецификациями затратно по времени; контракты зачастую многословны и дублируют тесты. В некоторых случаях контракты снижают производительность кода.
Выделение суперкласса имеет предел
Выделение суперкласса позволяет избежать дублирования, но имеет предел вложенности. Невозможно выносить функциональность всё выше и выше без последствий — чрезмерное вынесение функциональности наверх может привести к появлению божественного объекта.
Также выделение суперкласса не гарантирует правильную иерархию объектов — может случиться, что новые бизнес-требования добавят сущность, которая не будет вписываться в уже изменённую иерархию.