
Sergey
23.11.2016
16:32:01
я вот все думаю сделать приблуду которая будет организовывать мне double dispatch сервисов в экшены контроллеров, что бы совсем избавиться от использования контейнера напрямую
http://www.martinfowler.com/articles/injection.html#UsingAServiceLocator
в частости там расписывается как сделать так что бы невилировать большую часть минусов сервис локаторов
ну и в целом это стоит почитать если есть сомнения что юзать и когда

Google

Ilya
23.11.2016
16:36:02
я никогда не думал именно в таком ключе - "стоит ли мне тут использовать DI, Service Locator или Singleton?"
само по себе программирование паттернами - это антипаттерн
пишу как есть, а потом узнаю, что переизобрел какой-нибудь Registry

Roman
23.11.2016
16:44:54
Мне в данном случае нужен паттерн, чтобы предвидеть грабли. Я то тоже могу написать как получится, и как придумаю. Но не хочу :)

Igor
23.11.2016
18:12:07
Проект новий или существующий?
Локатор легче внедрить
В существующий проект всмисле,
Если проект новий то di, контроллери/команди - локатор, как уже вище Фесор сказал :)

Sergey
23.11.2016
18:16:00
ну или делай все максимально явно
возьми Disco
неплохой контейнер зависимостей
простой как пробка

Google

Sergey
23.11.2016
18:20:15
или php-di если на производительность пофигу и главное удобства

Roman
23.11.2016
18:21:27

Sergey
23.11.2016
18:22:09
короч все довольно просто. Если в языке для организации модулей есть только классы - бери dependency injection
если есть модули - у тебя уже все хорошо)

Roman
23.11.2016
18:22:23

Sergey
23.11.2016
18:22:36
SOLID уже знаешь?)

Igor
23.11.2016
18:22:57
Вопрос с подвохом )

Sergey
23.11.2016
18:23:25

Roman
23.11.2016
18:24:04
Модули, это я так называю их сейчас :) По сути, там сейчас просто папки, в каждой из которых свой хаос, в их неймспейсе
А я хочу сделать по единой структуре

Sergey
23.11.2016
18:24:27
это не те модули
я о модулях как в javascript например
структурная единица языка
папки это папки

Roman
23.11.2016
18:25:05
Короче правильнее будет называть, не модули, а сервисы

Sergey
23.11.2016
18:25:15
эм... не
сервисы это... сервисы)
под модулем в php стоит воспринимать класс
unit = модуль
в php unit = класс

Google

Sergey
23.11.2016
18:26:17
следовательно в php класс = модуль)
давай лучше по SOLID

Roman
23.11.2016
18:26:51
Ок. Папка Request, в которой есть какая-то своя структура и зависимости между классами, с одним каким-то главным. Как это тогда назвать? :)

Sergey
23.11.2016
18:26:59
папка)
компонент если хочешь

Roman
23.11.2016
18:27:22
О, точно. Компонент правильнее :)

Sergey
23.11.2016
18:27:30
ну или опять же - модуль тоже норм
модули могут состоять из других модулей
но не надо путать модули в каком-нибудь yii и модули как единицы декомпозиции системы
так это, что там с SOLID?

Roman
23.11.2016
18:32:45
Нет, ничего сказать не смогу :) Много раз читал и слышал, и на кончиках пальцев понимаешь, что это, но осознанно по пути SOLID я никогда не шел.

Sergey
23.11.2016
18:33:42
а зря

Sergey
23.11.2016
18:34:05
рекомендую если и не следовать пути SOLID, хотя бы разобраться что это такое и зачем

Roman
23.11.2016
18:34:05
Система должна быть написана так, что если ты что-то меняешь, то не ломалось всё, и везде
Но это и дураку понятно

Sergey
23.11.2016
18:34:13
ну вот это про SOLID
> Но это и дураку понятно
оно может и понятно, но почему-то никто так не делает

Roman
23.11.2016
18:35:39
В моем случае так получается, потому что было 3 чувака, которые писали как им хотелось, и никто ничего не контроллировал
А потом пришел я, сказал что все говно, давайте сначала

Sergey
23.11.2016
18:35:52
это так себе отговора не разбираться в том что это такое

Google

Sergey
23.11.2016
18:36:05
и как это помогает разделять систему и управлять зависимостями
и это я еще про GRASP не начал впрягать
> А потом пришел я, сказал что все говно, давайте сначала
так всякий может. А попробуй отрефакторить что бы интересы бизнеса а не свои соблюдались
всем понятно что в чужом говне ковыряться противнее чем в своем)

Roman
23.11.2016
18:37:01
Ну это я условно так сказал
Я то рефакторингом и занимаюсь
Но сейчас есть возможность заложить новый кирпичик уже

Sergey
23.11.2016
18:37:36
ты мне скажи почему не хочешь SOLID
это не из тех вещей которые надо долго вкуривать, оно... довольно просто все

Roman
23.11.2016
18:38:51
Я хочу SOLID, но я не уверен, что я делаю как надо :)

Admin
ERROR: S client not available

Sergey
23.11.2016
18:39:14
что именно делаешь как надо?)
ну или не делаешь)
короч захочешь про SOLID поболтать - пиши, я всегда рад)
про любую букву

Roman
23.11.2016
18:47:31
Возвращаемся к вопросу, о котором я писал неделю, или две назад, про два стула :)
Делаю я компонент для рассылки нотификаций сейчас, для различных соцсетей. Для каждой АПИ, соответственно, свои там внутренние реализации, но интерфейс у них один, с методом sendNotification например. Этот функционал входит в ядро проекта, которое никто трогать не будет. Но потом приходит Вася какой-то, и говорит, мне надо здесь добавить две строчки своих кода в твоем методе, для моего проекта. Как в данном случае сделать так, чтобы Вася смог это сделать, не влезая в ядро?

Sergey
23.11.2016
18:48:16
пусть сделает свой класс, который в качестве зависимости юзает что-то в ядре

Roman
23.11.2016
18:48:41
Просто extends, и всё?

Sergey
23.11.2016
18:48:47
никаких extends
implements максимум

Google

Sergey
23.11.2016
18:49:10
а лучше вообще свой интерфейс замутить
с тем что надо
инверсия зависимости
наследование - это рак

Roman
23.11.2016
18:49:37
Ну вот, ему надо будет мой интерфейс заюзать, но написать все же всё так как у меня, но добавить 2 строчки своих?

Sergey
23.11.2016
18:49:54
не надо ему твой интерфейс, пусть свой сделает с тем что ему надо
> но написать все же всё так как у меня, но добавить 2 строчки своих?
смотря что за 2 строчки
но если единственный способ с твоим кодом расширять функционал это наследование или копипаста - значит с кодом что-то не так

Roman
23.11.2016
18:51:18
Ну так я не хочу так сейчас сделать, чтобы нужна была копипаста эта

Sergey
23.11.2016
18:51:33
смотри
твой этот сервис для нотификаций
какой у него интерфейс?
и что делают те две строчки которые надо добавить?

Roman
23.11.2016
18:52:01
Не знаю, я это всё сейчас придумал
Я не реальный пример привел. А то, как я предполагаю уже будет

Sergey
23.11.2016
18:52:18
ну так блин) придумай что за две строчки) что бы разговор был более предметный

Aleh
23.11.2016
18:52:29
и самое главное
напиши тест!

Sergey
23.11.2016
18:52:38
ну сейчас можно без тестов)

Aleh
23.11.2016
18:52:56
так неинтересно

Sergey
23.11.2016
18:53:09
потом будет про тесты мозг промывать

Roman
23.11.2016
18:53:15
Экстремальное программирование, это программирование без тестов
Я люблю экстрим