Ну смотри я так понимаю, что у тебя есть пачка сервисов,

у которых общий интерфейс
в интерфейсе два метода: setBlabla и handle, и их нужно вызвать один за другим. и прямо сейчас ты это помнишь и понимаешь.
но если отвлечься от "здесь и сейчас" то возникают вопросы:
1. из чего следует, что их нужно вызвать последовательно? кто будет постоянно это помнить? а ведь кроме как "помнить" - ничего не даёт понимания такой необходимой очерёдности? это называется temporal coupling
2. что будет, если забыть вызвать? а рано или поздно кто-то забудет
3. что будет, если перепутать очерёдность? а кто-то рано или поздно перепутает
4. представим, что навернётся сложная логика и очерёдность вызовов будет такой:
setBlabla
handle
handle
сколько времени у тебя уйдёт на дебаг и на понимание того, почему при втором вызове у тебя получится говно? и даже более того - сколько времени у тебя уйдёт на то, чтоб выяснить, что говно получается именно при втором вызове?

4 ответов

23 просмотра

что предлагаешь?

Шурик- Автор вопроса
Evgeniy Polyakov
что предлагаешь?

сделай так, чтоб не было необходимости "знать" о необходимости вызывать что-то в нужной последовательности передавай в handle всё, что нужно уйдешь от temporal coupling, уйдешь от наследования, сделаешь невозможным (или менее возможным) некорректный вызов метода

Шурик
сделай так, чтоб не было необходимости "знать" о н...

я вчера думал на тему как мне передать в сервис все то что нужно сервису а нужно для каждого сервиса разное так и появился метод getMetadata, который считывает из бд весь набор настроек и массивом передает в handle

Шурик- Автор вопроса
Evgeniy Polyakov
я вчера думал на тему как мне передать в сервис в...

$service = $this->container->get($serviceClass); $service->handle($source->getSource()); а getSource внутри класса объекта $source может собрать всё, что нужно в виде объекта. Передаёшь один аргумент, ничего нельзя проебать или потерять или наоборот $source->process($service) $source принимает инстанс какого-то интерфейса и передаёт ему в интерфейсный метод приватные проперти, не выставляя стейт в наружу. сразу уйдёт пару геттеров. но тут уже нужно смотреть кто от кого больше зависит

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта