Синглтон, антипаттерн и все-все-все

WMix

герр M:)ller
Партнер клуба
хорошо, не в сервисах и тем более не в моделях. ( модель в смысле MVC ) но контроллер то имеет или я не понимаю как работает DI
 
Последнее редактирование:

Redjik

Джедай-мастер
В жопе что ли? Извините :D Естественно, в одном. Это не решает проблемы расхождения реального инстанса и этих @property.


Я и приводил best vs bad practice вообще-то, чувак. Открой глаза шо ле.
Ахах, ну понятно все с тобой... говорили про одно, стало совсем другое... переводи тему дальше и сливайся еще больше, спор с тобой бесполезен, когда у тебя закончатся псевдоагрументы, ты скажешь, что я лох, ибо пишу на пхп
 

WMix

герр M:)ller
Партнер клуба
Redjik, я соглашусь что если мы будем пихать везде sl то можно сразу было унаследоваться от object. по сути одно и тоже.
у меня в другом вопрос. я могу заинжектить в контроллер некий request. но что произойдет в той или иной акции я не знаю поэтому заранее инжектить модель я не могу. те. в контроллере будет место когда мне понадобится тот или иной сервис. а как я его получу если не таким $this->(sl|dic)->get('имя') образом?
 

Redjik

Джедай-мастер
WMix, я и говорил уже, что нужно просто аккуратно пользоваться инструментом, know your tools.
те. в контроллере будет место когда мне понадобится тот или иной сервис. а как я его получу если не таким $this->(sl|dic)->get('имя') образом?
Никак - мы все говнокодеры в глазах Вурдалака :D
 

Вурдалак

Продвинутый новичок
WMix, ну такое тут уже когда-то обсуждалось, ты либо можешь ижектить в сам action:
PHP:
public function viewAction(Request $request, Mailer $mailer)
но такое не все фреймворки поддерживают, либо через сеттеры, например.
 

Redjik

Джедай-мастер
1) Можно тупо пихать во все контроллеры эти компоненты, но страдает lazyLoad
2) С другой строны можно пробовать отследить зависимости перед инициализацей обьекта контроллера через рефлексию, но это сродни лечению гланд через анальное отверстие
феерично, ты предлагаешь заменить говнокод SL, еще большим говнокодом, так как один чувак написал, что SL это плохо, так как не умеет пользоваться инструментом?
 

MiksIr

miksir@home:~$
Argumentum ab auctoritate. «Не нашёл у Фаулера!»
Ваще-то аргумент гораздо более весомее, чем "Вурдалак на phpclub.ru сказал". Для меня, по крайней мере.

потому что это гребаная магия и костыль
Можно не пользоваться магией, ради бога. Описывайте методы ->getServiceName().

Отличие SL от DI в общем и целом одно - четкость показанных зависимостей. Что очень важно в случае, когда... впрочем, лучше процитирую "не авторитета":
So the primary issue is for people who are writing code that expects to be used in applications outside of the control of the writer. In these cases even a minimal assumption about a Service Locator is a problem.
В принципе да, так и есть. А абстрактные "потом этот код станет ..." - они и есть абстрактные. Я сам люблю DI, но прекрасно понимаю, что SL - удобнее. А "удобный" DI быстро превращается в ад с конфигами или аннотациями и работой через контейнер "создай класс, вызови метод" - где, к слову, имена классов и методов будут стрингами же, да? Вот тебе и проблемы с опечатками и автокомплитами. Ну хз, может есть идеальный контейнер, который это решает.
 

Вурдалак

Продвинутый новичок
В Symfony по желанию контейнер тащится только в Controller'ы и Command'ы. А если такого желания нет, то тыц и тыц.
Утверждать после этого, что «вся симфани» написана на «этом» — это больное воображение и выдача желаемого за действительное.
Код:
$ grep 'getContainer(' -R . | grep -v 'Test.php' | grep -v '.twig' | grep -v 'Command.php' | wc -l
13

$ grep 'getContainer(' -R . | grep -v 'Test.php' | grep -v '.twig' | grep -v 'Command.php'
./Symfony/Bundle/FrameworkBundle/Client.php:    public function getContainer()
./Symfony/Bundle/FrameworkBundle/Client.php:        return $this->kernel->getContainer();
./Symfony/Bundle/FrameworkBundle/Client.php:        if (!$this->kernel->getContainer()->has('profiler')) {
./Symfony/Bundle/FrameworkBundle/Client.php:        return $this->kernel->getContainer()->get('profiler')->loadProfileFromResponse($this->response);
./Symfony/Bundle/FrameworkBundle/Client.php:        if ($this->kernel->getContainer()->has('profiler')) {
./Symfony/Bundle/FrameworkBundle/Client.php:            $this->kernel->getContainer()->get('profiler')->enable();
./Symfony/Bundle/FrameworkBundle/Client.php:            $profilerCode = '$kernel->getContainer()->get(\'profiler\')->enable();';
./Symfony/Bundle/FrameworkBundle/HttpCache/HttpCache.php:        $this->getKernel()->getContainer()->set('cache', $this);
./Symfony/Bundle/FrameworkBundle/HttpCache/HttpCache.php:        $this->getKernel()->getContainer()->set('esi', $this->getEsi());
./Symfony/Bundle/FrameworkBundle/Test/WebTestCase.php:        $client = static::$kernel->getContainer()->get('test.client');
./Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php:    public function getContainer()
./Symfony/Component/HttpKernel/Kernel.php:    public function getContainer()
./Symfony/Component/HttpKernel/KernelInterface.php:    public function getContainer();
 
Последнее редактирование:

Redjik

Джедай-мастер
Лол, пример на отборный говнокод, чтобы доказать свою правоту - это круто!
Бизнес логика - примерно 40% приложения (50%-база, 10% - шаблоны и вид), если контроллеры для тебя это так, пшик - то попробуй уже что-нибудь написать, а не разглагольствовать на форумах.

и да, ты еще $this->container поищи - будешь удивлен, я уж не говорю, что другие бандлы (кроме фв), довольно активно используют SL

Ну кончено увидеть пример с new Response в контроллере от человека, который с пеной у рта говорил, что DI наша мать и отец - похохотал.

Утверждать после этого, что «вся симфани» написана на «этом» — это больное воображение и выдавание желаемого за действительное.
почитай уже код фв нормально, а то смешно ей богу
ты прочитал код пары мелких бандлов и мануал - этого недостаточно
 

Redjik

Джедай-мастер
А уж если искать в других бандлах и бриджах - цифра увеличится в 2 раза.
Ты безнадежен.

ЗЫ. нормально так съехал с темы про говнокод
 

Вурдалак

Продвинутый новичок
Redjik, успокойся, не нервничай, почитай моё сообщение ещё раз и пойми, что я исключил из грепа.

P.S. Ты до сих пор в резюме пишешь, что ты купил лицензию на phpStorm? :D
 

Redjik

Джедай-мастер
P.S. Ты до сих пор в резюме пишешь, что ты купил лицензию на phpStorm? :D
Да, ведь я могу себе это позволить :D :D :D

P.S. Ты до сих пор в резюме пишешь, что ты купил лицензию на phpStorm? :D
Посмотри внимательно, там две картинки, вторая про $this->container.

да и вообще 69 общее - 8 на тесты ... ну никак не получается 13, странный греп у тебя, ох странный

upd, упс - не туда посмотрел, но в целом мысль ясна я думаю
 

Redjik

Джедай-мастер
Nuff said, ты уже не знаешь к чему придраться, лишь бы оправдаться.
ой да больно надо к тебе придираться и оправдываться, если бы я хотел придраться - я бы сказал - иди подучи английский - фараза nuff said не имеет ни грамматического ни лексического смысла.
nuff to say хотя бы, а лучше nothing все же, а не подонковский сленг

ты хотел облить меня говном и сам в нем утонул, а теперь пытаешься съехать на дурочка и с каждым постом все глубже увязаешь
удачи.
 
Сверху