Наследник класса доставки бросает исключение там, где базовый класс работал
class Shipping
{
public function trackingUrl(string $trackNumber): string { ... }
}
class PickupShipping extends Shipping
{
public function trackingUrl(string $trackNumber): string
{
throw new LogicException('Самовывоз не отслеживается');
}
}
Страница заказа, работающая с любым Shipping, падает для самовывоза. Какой принцип нарушен и как исправить?
- Подстановки Лисков: разделить контракт на отслеживаемые и нет
- Единственной ответственности: вынести исключение в сервис
- Открытости/закрытости: добавить в базовый класс проверку типа
- Никакой: код страницы должен ловить LogicException
