@oop_ru

Страница 313 из 785
Eugene
14.08.2017
10:07:30
коллеги, кто использует монолитные репозитории, есть вопрос по управлению зависимостями

Den
14.08.2017
10:09:28
Eugene
14.08.2017
10:11:15
монолитные это когда в репозитории содержится более одного логического проекта

тут можно посмотреть вкратце о чем это: https://speakerdeck.com/fabpot/a-monorepo-vs-manyrepos

Google
Den
14.08.2017
10:13:02
Виталий
14.08.2017
10:30:14
Привет всем. Вопрос есть по DI. Как лучше использовать? Di::get('modelFactory'); Di::getImplement('\Factory\Interface'); В первом случае используем соглашение о наименовании, но можно магией получать вроде $this->modelFactory; Во втором все нагляднее, по типу аргумента получаешь реализацию, но в коде будет явный вызов контейнера А вообще кто как пользует?

Виталий
14.08.2017
10:34:56
Это условный код, сам не люблю статику

Den
14.08.2017
10:35:05
use Defr\FtlTheme\Page\PageSeeder;

$this->call(PageSeeder::class);

Типа статик тоже )))

Виталий
14.08.2017
10:38:17
Т.е. второй вариант. Вроде $this->getDi()->getImplement(AbstractSeeder::class);

Max
14.08.2017
10:39:09
Привет всем. Вопрос есть по DI. Как лучше использовать? Di::get('modelFactory'); Di::getImplement('\Factory\Interface'); В первом случае используем соглашение о наименовании, но можно магией получать вроде $this->modelFactory; Во втором все нагляднее, по типу аргумента получаешь реализацию, но в коде будет явный вызов контейнера А вообще кто как пользует?
Если у вас нет dependency-injection механизма (например, на рефлексии) и вы просто используете di-контейнер, я бы рекомендовал первый вариант с именоваными сервисами. Но это если количество таких сервисов небольшое, иначе нужно будет придумать и помнить слишком много имен.

Если механизм есть, то, только имена интерфейсов/классов.

Виталий
14.08.2017
10:42:59
А рефлексия не сильно много отожрет? Как-то опасаюсь ее в проде использовать.

Max
14.08.2017
10:44:29
Ну, надо хороший механизм с кешированием и компиляцией :)

Google
Den
14.08.2017
10:45:40
Без NS?

Или полные?

Max
14.08.2017
10:45:59
Полные

Den
14.08.2017
10:46:53
Я везде юзаю юз

Кроме пары мест

Max
14.08.2017
10:48:42
@agapovv , у вас di-контейнер, который вы сами наполняете, или абстрактная фабрика, которая по имени сервиса резолвит класс и создает его?

Aleh
14.08.2017
10:49:57
так а разве есть разница, как в сервис локатор закидывается объект?

Виталий
14.08.2017
10:50:36
Вот это я сейчас и выбираю, как лучше. Проблема в том, что проект сильно завязан на Phalcon\Di и подключение стороннего механизма затратно.

Виталий
14.08.2017
10:51:30
так а разве есть разница, как в сервис локатор закидывается объект?
А оттуда как забрать? По названию класса или по солгасовваному именованному ключу?

Den
14.08.2017
10:51:53
Или я гоню?

Aleh
14.08.2017
10:52:10
А оттуда как забрать? По названию класса или по солгасовваному именованному ключу?
насколько этот вопрос вообще принципиален? У вас мест использование этого должно быть крайне мало

ну, относительно конечно, проще всего по классу, потому что не надо выдумывать еще одно имя

Виталий
14.08.2017
10:53:29
Мест подключения мало, а вот сервисов в DI куча, и еще будет.

Max
14.08.2017
10:54:19
так а разве есть разница, как в сервис локатор закидывается объект?
Никакой принципиальной, но если я сам создаю сервис-провайдеры, мне удобнее давать сервисам простые короткие имена, типа "db", "logger" и т. п. Если нет, то, по-моему, лучше использовать класснеймы (включая интерфейс-неймы)

Google
Виталий
14.08.2017
10:55:48
С db и логгерам, кэшами все просто. А вопрос возникает, когда есть библиотека, которая, к примеру использует файбрику моделей, и клиенту надо заменить фабрику на свою.

Aleh
14.08.2017
10:56:04
вот в js/python у вас сервис локатор по файловой системе

а в пыхе проще по fqn

Max
14.08.2017
10:57:32
чем это лучше Logger::class, которое еще и легко анализируется статически всякими ide/тулзами
Вкусовщина, у меня нет аргументов. Так тоже ок. Кроме того, что, анализ вряд ли будет работать для возвращаемого значения, так что это не помогает.

Виталий
14.08.2017
10:58:13
Ну в целом, получается, что по названию интерфейсов. Сделать один сервис-фабрику Di, который будет отдавать конкретную реализацию. А если количество возрастет, заменить на механизм DI. Спасибо

Aleh
14.08.2017
10:58:26
Вкусовщина, у меня нет аргументов. Так тоже ок. Кроме того, что, анализ вряд ли будет работать для возвращаемого значения, так что это не помогает.
плюсом ориентирование на интерфейсы - заменяемость, мой код в приложении зависит от интерфейсов, а значит, когда я хочу что-то заменить, то я не думаю про какой-то там сервис в контейнере, а думаю про иную реализацию интерфейса

Max
14.08.2017
10:59:21
Согласен, имя интерфейса универсальнее.

А у тебя для всего они есть?
Любая абстракция или даже конечный класс, в вобщем-то подойдет.

Den
14.08.2017
11:01:26
Любая абстракция или даже конечный класс, в вобщем-то подойдет.
Мне в скаффолде только для модели и репозитория создается. Я и не парюсь для других сущностей.

Виталий
14.08.2017
11:04:04
Как репозитоий заменить на другой в процессе выполнения?

Den
14.08.2017
11:04:47
setRepository метод ваще вроде

Виталий
14.08.2017
11:05:22
setRepository он же не статический? Вызывается откуда-то

Den
14.08.2017
11:05:47
А где ты менять собрался?

Admin
ERROR: S client not available

Den
14.08.2017
11:06:01
Там и вызывать надо

У меня в модели есть привязка

И еще в билдерах таблиц

Google
Den
14.08.2017
11:07:00
И деревьев тож

Виталий
14.08.2017
11:08:04
Так-то да. А если подключать это все к другому, клиентскому, коду через композер. Как из него настроить репозиторий?

Den
14.08.2017
11:08:44
В каком то объекте

Классе

Виталий
14.08.2017
11:11:14
У меня этот объект - DI контейнер. Там и репозитории и сервисы и фабрики. Выбирал как получать из него. По имени интерфейса или ключу.

Den
14.08.2017
11:12:43
Там биндинги есть в контейнере?

Виталий
14.08.2017
11:14:22
В phalcon\di я не нашел. Вот свою реализацию и пилю.

Den
14.08.2017
11:17:16
А че, у тебя уже куча кода написана?

Виталий
14.08.2017
11:17:43
Угу, и не только мной )

Den
14.08.2017
11:18:33
Ухх

Oleg
14.08.2017
12:08:46
В phalcon\di я не нашел. Вот свою реализацию и пилю.
https://docs.phalconphp.com/en/3.2/di разве не то

Aleh
14.08.2017
12:10:18
вообще обсуждение пыховских библиотек оставлять в чатике пхп

Виталий
14.08.2017
12:10:21
О нем речь, только там биндингов я не вижу

Виталий
14.08.2017
12:11:06
вообще обсуждение пыховских библиотек оставлять в чатике пхп
Обсуждали DI. О phalcon речь зашла только для описания отсутствия функционала. Вдруг я слепой и не видел чего-то.

Den
14.08.2017
12:12:52
Хз, я там к ларкиным привык. Тем более юзаю апгрэйженый провайдер. Меня всем устраивает

Saen
14.08.2017
13:24:42
Тут есть повернутые на SOLID ?

ну точнее, как реальны мир уживается с SOLID ?

по моим наблюдениям со скрпом

Aleh
14.08.2017
13:25:14
вообще хорошо уживается

Google
Aleh
14.08.2017
13:25:17
не понимаю вопроса)

Evgeniy
14.08.2017
13:26:50
повернутых нет, но solid это хорошая штука которой выгодней придерживаться, чем не придерживаться, имхо

Страница 313 из 785