[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDIC - Property Dependency Injection Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
chee
twin, рефлексия опциональна, по-умолчанию контейнер работает без рефлексии, нормально читай код.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
А что изменилось то касательно моего "высера"? Ну да, теперь ловится ReflectionException, если нет свойства. Ради этого стоило так нагружать систему... Но не суть. Начнем все сначала. Зачем там метод getClasses($class)?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 15.01.2021 - 18:16)
А что изменилось то касательно моего "высера"? Ну да, теперь ловится ReflectionException, если нет свойства. Ради этого стоило так нагружать систему... Но не суть. Начнем все сначала. Зачем там метод getClasses($class)?

Начинай, но без меня. Я тебе выше уже написал.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата (twin @ 15.01.2021 - 18:16)
Ну да, теперь ловится ReflectionException, если нет свойства. Ради этого стоило так нагружать систему.

без использования внедрения в защищенные и приватный свойства система не нагружается, делал нагрузочное тестирование. Это выбор программиста как он будет внедрять свойства, хочет скрыть свойства - пусть теряет производительность, важна производительность - пусть открывает свойства. Я не заставляю, я даю инструмент и право выбора.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Так ничего не изменилось :D Только суррогата добавил. Очень прозрачно теперь. Ну это твои дела.

Метод getClasses($class) там лишний. Я же написал. Все и без него будет работать. Рефлексия тебе конечно поможет отловить не задекларированные свойства. Но так ли важна декларация, чтобы ради неё такой паровоз городить?

Еще раз, если ты не услышал.

1. Свойства устанавливаются сами, автоматически, даже если ты не написал

    public $storage;


2. Их и так видно везде.

3. Ломать скрипт рефлексией, запихивая значения в защищенные свойства, это даже для тебя перебор. А как же SOLID?

4. А если теперь у тебя за проверку отвечает рефлексия, то тем более не нужен.

А ты говоришь высер. У тебя не только с логикой проблемы, но и пробелы в элементарных знаниях.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
twin, читай код, все вопросы отпадут. Согласен, что синтаксис усложнился, но радует что это все очень редкие случаи такого использования контейнера.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 15.01.2021 - 14:29)
twin, читай код, все вопросы отпадут
Так а я что делаю? Только вопросов становится все больше biggrin.gif


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
twin, склонируй проект, запусти композер, запусти тест, выполни в коде контейнера первую рекомендацию из этого сообщения http://phpforum.su/index.php?act=Print&cli...min=236&limit=1, запусти тест, если тест пройдет, то скажу огромное спасибо за упрощение кода.

Это первая рекомендация, если что
Цитата
    protected function getPropertiesByClass($class)
    {
        return $this->injections[$class] ?: [];
    }


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Ну я тесты твои не буду запускать. А на задачке твоей проверил. Я же не просто так говорю. Сам проверь.

Долго разбирался куда восклицательный знак влупить. Вот ты упростил синтаксис biggrin.gif

И это. Теперь, получается, чтобы отключить(!) рефлексию, нужно везде их поставить? blink.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Вот интересно, как ты относишься к собачкам? Ты понимаешь, что ты сделал ее аналог? Я вот только не пойму, почему там не она у тебя, а восклицательный знак. Поставь тогда собачку, не так стыдно людям в глаза смотреть будет, когда в защищенные свойства напихают дерьма. Они не просто так защищали же их.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
https://www.youtube.com/watch?v=d1vRLfuF-wM

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

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Изменения:
- К репозиторию PDIC подключил Travis CI

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 15.01.2021 - 16:26)
Если ты не хочешь даже запускать тесты и смотреть как использовать контейнер, я тебе на эти вопросы отвечать не буду.

Как использовать контейнер нужно смотреть в доках, которых нет. Тесты я запускать не буду, нафига мне это. К тому же они бестолковые. Кроме того, что задекларировать, что может твоя поделка, тесты должны ещё эмулировать непредвиденные ситуации. Вот я тебе сейчас расскажу, а ты как хочешь, можешь тест написать, можешь забить. Дело твое, за пользователей я спокоен. Ни один здравомыслящий разработчик с этим связываться не будет. Я до последнего надеялся на здравый смысл, думал наследование у тебя снизу вверх. А оказывается наоборот.

Крыша абстракция потекла еще сильнее. Причем это уже критично. Ты сделал
A) Неявное наследование зависимостей по умолчанию. Причем не опционально.
Б) Сделал зависимости, не сервисы, глобальными по дефолту.

Теперь смотри. Пример на коленке, абстрактный, без кода. Допустим есть два класса, наследуемых от одного родителя. А ещё хуже, использующих общий трейт. Мы, воспользовавшись твоим советом, внедряем зависимость в родителя. Замечательно работает, ура.

Теперь последовательно запускаем первый, потом второй, в нем что то меняем в зависимости, потом опять запускаем первый. Это уже не Мариванна со склада, это серьезнее. Мы ожидаем получить то, что отработано в первом объекте, тем более он расшареный. А получим результат второго. Хотя это разные классы, называются по разному. Ты эту ошибку в IDE не отловишь, так как она Runtime.

В карте твоей можно заблудиться. Карта нужна для того, что бы ориентироваться, а там совершенно не видно, откуда что берется. Там не указано явно, что откуда наследуется. Так что это не карта по определению, а дремучий лес. Бегать искать куда что внедрили раньше... Еще и синтаксиса набуробил.

А про трейты и говорить не хочется. Ты и туда запулил глобальную зависимость. Ужос. Если при наследовании еще как то можно с этим побороться, с трейтами совсем бяда.

Ну и вишенка на торте - сломал защиту. Залез в приватные свойства. Наплевал на SOLID, на инкапсуляцию, на желание разработчика защитится от дурака. Бедные разрабы PHP ночей не спали, делали уровни доступа. Ты взял, одним движением сделал все свойства публичными. Причем, как я понял, не только для зависимостей, но и любые. Во тебя поперло))) Про рефлексию узнал только что? biggrin.gif

Ты вот думаешь, что изобрел офигенную фишку, до которой раньше додуматься ни кто не мог? Ты гений, поздравляю. А в той же Симфони одни дебилы сидят, не могут три строчки написать, чтобы все автоматически наследовалось.

Там есть наследование, но его нужно обозначить явно. Кроме того, там не обязательно прямое наследование, в php. Потому что сейчас наследование вообще не в чести, делегирование рулит. И можно это все переопределить. Вот это называется профессиональный подход. А у тебя костыль.

Я тебе на самом деле благодарен, что ты меня сподвиг карту сделать. Но дальше в твоем дерьме барахтаться не хочется. Ухожу в очередной раз biggrin.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
twin, уходи и не возвращайся.


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
- Добавлена возможность внедрение зависимостей через конструктор (без использования рефлексии)
    
$map = [
ExampleJ::class => [
'^2' => ExampleD::class,
'^1' => '@string',
],
];





class ExampleJ extends ExampleA
{

/**
*
@var string
*/

protected $string;

public function __construct($string1, ExampleD $exampleD)
{
$this->string = $string1 . get_class($exampleD);
}

public function __toString()
{
return $this->string;
}

}


Функция добавлена, так форсированное внедрение через рефлексию вносит неясность в понимание кода, а также добавляет сложности при покрытии кода тестами.

Иногда существует необходимость передать данные в экземпляр класса, эти данные будут доступны только внутри него. Раньше это решалось через форсированное внедрение с помощью рефлексии, сейчас лучшим вариантом будет использовать внедрение через конструктор.

PS: Форсированное внедрение через свойства остается, так как запас жопы не дерет, может кому-то понадобится.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.