у которых общий интерфейс
в интерфейсе два метода: setBlabla и handle, и их нужно вызвать один за другим. и прямо сейчас ты это помнишь и понимаешь.
но если отвлечься от "здесь и сейчас" то возникают вопросы:
1. из чего следует, что их нужно вызвать последовательно? кто будет постоянно это помнить? а ведь кроме как "помнить" - ничего не даёт понимания такой необходимой очерёдности? это называется temporal coupling
2. что будет, если забыть вызвать? а рано или поздно кто-то забудет
3. что будет, если перепутать очерёдность? а кто-то рано или поздно перепутает
4. представим, что навернётся сложная логика и очерёдность вызовов будет такой:
setBlabla
handle
handle
сколько времени у тебя уйдёт на дебаг и на понимание того, почему при втором вызове у тебя получится говно? и даже более того - сколько времени у тебя уйдёт на то, чтоб выяснить, что говно получается именно при втором вызове?
что предлагаешь?
сделай так, чтоб не было необходимости "знать" о необходимости вызывать что-то в нужной последовательности передавай в handle всё, что нужно уйдешь от temporal coupling, уйдешь от наследования, сделаешь невозможным (или менее возможным) некорректный вызов метода
я вчера думал на тему как мне передать в сервис все то что нужно сервису а нужно для каждого сервиса разное так и появился метод getMetadata, который считывает из бд весь набор настроек и массивом передает в handle
$service = $this->container->get($serviceClass); $service->handle($source->getSource()); а getSource внутри класса объекта $source может собрать всё, что нужно в виде объекта. Передаёшь один аргумент, ничего нельзя проебать или потерять или наоборот $source->process($service) $source принимает инстанс какого-то интерфейса и передаёт ему в интерфейсный метод приватные проперти, не выставляя стейт в наружу. сразу уйдёт пару геттеров. но тут уже нужно смотреть кто от кого больше зависит
Обсуждают сегодня