@prophp7

Страница 73 из 1387
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
Экстремальное программирование, это программирование без тестов

Я люблю экстрим

Страница 73 из 1387