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