
Aleh
18.02.2017
15:13:51
а еще

Evgeniy
18.02.2017
15:14:19
а вот в твоем случае необходимость в предварительной инициализации контейнера потребуется map передать
так он грузится единожды и фаил php потом в opcache

Aleh
18.02.2017
15:14:39
ты нигде их не сохраняешь

Google

Evgeniy
18.02.2017
15:14:42
лежит если дата изменения не поменялась

Aleh
18.02.2017
15:14:44
т.е. каждый раз создается новый сервис
в psr-4 единожды

Evgeniy
18.02.2017
15:15:17
и повторно к этим файлам обращения не идет он сразу берет opcode и не интерпретирует фаил
я имею ввиду не на обработке 1 запроса
а между запросами
opcache кэширует php файлы (интерпретирует)
тоесть если мы говорим о ситуации когда холодный старт происходит, то да ты прав в твоем случае фаил подгрузится 1 раз и массив (map) будет
в моем случае файлы будут интерпретироваться

Aleh
18.02.2017
15:17:20
ты создаешь проблему для разработчиков

Evgeniy
18.02.2017
15:17:25
но если мы говорим о production там содержимое файлов будет скорей всего закэшированно

Aleh
18.02.2017
15:17:28
им надо следовать формату и загрузке твоего лоадера

Google

Evgeniy
18.02.2017
15:17:37
причем тут формат?

Aleh
18.02.2017
15:17:39
он там хоть с psr-4 не пересекается?
в то время как с мапой они сами решают, как хранить эти фабрики
и подключать

Evgeniy
18.02.2017
15:18:03
мы начали говорить о том что тот include совсем не о psr4

Aleh
18.02.2017
15:18:09
т.е. как говорил Сергей, ты решаешь чужую проблему

Evgeniy
18.02.2017
15:18:37
теперь от обсуждения кэширвоания мы идем к тому что обсуждал Сергей
мы начали с того чем заменить include в том месте

Aleh
18.02.2017
15:21:02
так, еще раз. Используя include, ты начинаешь решать чужие проблемы, эти проблемы уже решили в psr-4 или другие загрузчики. Если пользователи хотят подгрузить свою фабрику, они могут сделать класс и он тогда загрузится автолоадером, могут функцию и она тоже загрузится автолоадером, а могут прямо при создании контейнера все передать
это их задача
а то, что ты делаешь уже решил psr-4

Evgeniy
18.02.2017
15:21:19
ты предложил psr4, я сказал что это не при делах в данной ситуации
это их дело и пусть ее грузит загрузчик composer или любой другой psr4, psr0 загрузчик
я этого не отрицаю

Aleh
18.02.2017
15:22:31
но ты не даешь им этого делать
и говоришь сам как что-то будет грузиться

Evgeniy
18.02.2017
15:22:40
даю
нет

Aleh
18.02.2017
15:22:47
и сам include делаешь

Google

Evgeniy
18.02.2017
15:22:55
нет

Aleh
18.02.2017
15:23:02
как нет?)

Evgeniy
18.02.2017
15:23:16
хорошо давай такую ситуацию
тебе нужен объект А
он жуткий легаси и правильно его создать следующим образом
$a = A::factory(...);
$a->init(...);
return $a;
плохо и тд, но код есть код

Aleh
18.02.2017
15:24:22
[ A::class => factory([AnyFuckingFactory, "YouWant"]) ]

Evgeniy
18.02.2017
15:24:38
ок ты прав
теперь у тебя для подобных классов вот такого кода овер дохуя
я лишь предлагаю данную конфигурацию в отдельных файлах хранить

Aleh
18.02.2017
15:25:10
да, и я решаю как мне разложить эти фактори для легаси

Aleh
18.02.2017
15:25:13
а не твой контейнер

Evgeniy
18.02.2017
15:25:23
я предлагаю создать файлик
со следующим содержимым

F01134H
18.02.2017
15:25:33
а вам не кажется что чат про ооп)

Aleh
18.02.2017
15:25:50
может в отдельных, может в yml конфиге, может у меня для этого классы фабрики с единым интерфейсом
это мое дело

Evgeniy
18.02.2017
15:26:35
return new Factory(function (ContainerInterface $c) {
$a = A::factory($c->get(B:class);
// other shit
return $a;
}
дословно только без use

Google

Evgeniy
18.02.2017
15:27:06
в моем случае определение этого объекта подгрузится в момент когда ты запросил A::class у locator
но если тебе не нравится формат что там чистый пхп код ты просто не создаешь new IoC

Aleh
18.02.2017
15:28:03

Evgeniy
18.02.2017
15:28:57
так понятней?

Aleh
18.02.2017
15:29:09
нет, вообще не понял твои последние сообщения)
но уже забил, надоело)

Evgeniy
18.02.2017
15:30:26
потому что я вижу ваши замечания но они чуть чуть не в тему, потому что вы код начали смотреть слегка не так
и самое просто будет мне сделать example
чтобы показать как это юзается)

Admin
ERROR: S client not available

Aleh
18.02.2017
15:31:35
ну и имя класса тож так се

Evgeniy
18.02.2017
15:31:48
имя класса да
мой косяк
здесь не спорю оно вас скорей всего и запутало

Aleh
18.02.2017
15:32:06
LegacyFactoriesIncluder
у тебя нет возможности сделать один сервис, он неизбежно каждый раз создает новый сервис
т.е. надо что-то над ним еще
есть вообще ему смысл имплементить ContainerInterface?

Evgeniy
18.02.2017
15:33:27
есть Locator
https://github.com/smpl/mydi/blob/master/src/Locator.php

Google

Evgeniy
18.02.2017
15:34:07
он на входе принимает цепочку ContainerInterface и по ним ищет
реализацию, если ты несоздашь объект IoC его не будет в этой цепочки и соответственно не будет этого include
ты сейчас верно пишешь, но моя вещь еще лучше)
спасибо тем кто потратил время и потратил время на замечания мне )
удалось собрать полезный фидбек то что в чате https://github.com/smpl/mydi/issues/86 и то что в лс сообщили https://github.com/smpl/mydi/issues/85

Aleh
20.02.2017
09:44:33
в какой момент геттеры начинают экспоузить состояние?
когда понять, что мы нарушили шаблон информационный эксперт?

Антон
20.02.2017
10:37:15
Не могу докурить смысл дружественных классов и функций в c++. Ведь по сути это нарушение инкапсуляции?О.о

Sergey
20.02.2017
11:01:16
например у тебя "заказ" вполне может внутри кешировать прайс
и код для вычисления прайса будет тот же геттер только с адекватным названием
но семантика с точки зрения интерфейса будет "мы можем узнать стоимость заказа"
это как в java ты можешь разрешить доступ к стейту другим объектам из того же пакета
ну или partial классы в c#
это просто способ один класс разделить на несколько файлов
для удобства

Антон
20.02.2017
11:06:05
Мммм

Sergey
20.02.2017
16:10:29
если с этим все ок то и с декомпозицией все ок
ну и наоборот