Как правильно применить полиморфизм?

Допустим в системе есть такая сущность как Товарно-транспортная накладная(ттн) для каждой из службы доставок. Но в зависимости от типа ттн, одни можно редактировать в бд, другие взаимодействуют с сторонними сервисами(сдек) и у них есть соответствующая логика. Как мне лучше построить архитектуру, чтобы, к примеру, при редактировании заказа вызывать нужные методы ттн в зависимости от ее типа? (если ттн можно редактировать - редактируем, если нужно редактировать на стороннем сервисе - делаем) Делать соответствующие интерфейсы для каждого типа?(EditableInDb,DeliveryServiceSync и т.д) и потом проверять на интерфейс
if ($ttn instanceof EditableInDb) { 
//some logic
}

Что по мне, не очень хорошо, ведь различия в логике могут в перспективе разрастись и таких вот проверок на интерфейсы будет море .
Или сделать общий интерфейс для всех типов ттн и оставлять некоторые методы без реализации для типов ттн, для которых не предусмотрено такое поведение?
Что скажите? Может есть какой-нибудь третий вариант?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
vkolya
@vkolya Автор вопроса
Сделал свойство типа boolean, которое и будет главным основным отличием
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
реализуй шаблон strategy + decorator
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы