170 похожих чатов

Подскажите как лучше сделать. Есть три класса, SmsService, EmailService, FaxService,

у них у всех есть классы сендеры уже с конкретной реализацией, TwillioSmsSender, ClickSendFaxSender и тд. У каждого сендера единый интерфейс, MessageSenderInterface который содержит один метод sendMessage, вопрос как лучше поступить, если я планирую в будущем часто менять провайдеров, и для этого первое что приходит в голову это сделать отдельные интерфейсы для каждого типа SmsSenderInterface, EmailSenderInterface, FaxSenderInterface и уже в контейнере указывать каждому реализацию, если провайдера отправки сообщений решим поменять скажем только для Email, то поменяем просто в контейнере bind и все, насколько нормально решение создать три одинаковых интерфейса с разным названием для этой цели? Возможно есть более хорошее решение, contextual binding мне не понравился так как возможно я в будущем не только в сервисах по отправке использовать буду эти классы. Буду рад комментариям

5 ответов

11 просмотров

а что мешает поменять через контейнер реализацию интерфейса MessageSenderInterface, зачем для этого создавать более узкие EmailSenderInterface, SmsSenderInterface, FaxSenderInterface получается шило на мыло

Какие методы добавит SmsSenderInterface к MessageSenderInterface?

DispooL- Автор вопроса
Egor Gruzdev
а что мешает поменять через контейнер реализацию и...

Как это сделать на ваш взгляд? Насколько я себе это представляю, я могу забиндить MessageSenderInterface к какой то реализации одной. А если у меня реализаций много, то как быть? У меня MessageSenderInterface это интерфейс по которому пишутся классы реализующие саму отправку именно саму отправку с завязкой на конкретного поставщика или агрегатора который эту отправку сделает, соответственно я не могу привязать интерфейс к какой то одной реализации

DispooL- Автор вопроса
Ruslan
Какие методы добавит SmsSenderInterface к MessageS...

Никакие, у всех интерфейсов один метод send, я заменю один интерфей(MessageSenderInterface) на три, но за то в контейнере смогу каждый интерфейс забиндить на конкретную реализацию, если захочу сменить поставщика, просто поменяю в контейнере реализацию и все

DispooL
Никакие, у всех интерфейсов один метод send, я зам...

если интерфейсы одинаковы, то можно не плодить их я бы сделал factory шаблон который создавал конкретный объект сендера с тремя методами (для СМС, почты и факса) я реализации указывал бы в конфиге (.env)

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

Обсуждают сегодня

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Никто случаем не знает, как по-хорошему делается дозапись текста в edit на винапи?
The Bird of Hermes
25
объясните, я прада не понимаю. зачем в перле нужен аниивент? кому он пригодился в действительно нагруженных проектах?
nerv
30
А какие у этого try практические плюсы перед eval?
Oleg Volkov
41
Ребзя, а кто-нибудь делал на сайте Турбо Страницы Яндекса? Какую-то пользу они дают или нет? Приносят ли трафик?
Андрей [aharito] Харитонов
20
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
Скажите, либо я тупой, либо непонятно что. Представьте что в регистре AX = 7FFF (в десятичной системе это число 32767), а в регистре BX = 0FFF (в десятичной системе это -1). У...
Rusplay
19
Привет всем, подскажите что тут не так? Выдает ошибку, что DataSet активен.
Alexander
14
Ребят, привет. Интересует вопрос: есть ли способ получить доступ к WebView в Linux? Рылся-ковырялся, решения не нашел. Объясню сразу задачу, возможно, скажете, что копаю не в...
advanc3d
13
вышел новый лазарус 3.4.0 кто пользовался? что нового? на что обратить внимание? итд
livontiy
22
Карта сайта