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

Собственно сабж: https://packagist.org/packages/cheevauva/pdic

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

Разреши задать вопрос. По большому счету он не только тебе адресован. Тебе в частности.

Если хватает квалификации делать что-то более-менее вменяемое – почему бы не помочь улучшить что-то существующее, более популярное?. Я понимаю, что делать свое прёт, и всё такое... Но как теперь ориентироваться во всем этом https://packagist.org/search/?q=di%20container ?
chee
Потому что идеология моего решения разительно отличается от других. Если коротко, то в самом приложении построенном на этом контейнера, сам контейнер можно увидеть в двух местах: где инициализируемый он сам и критические зависимости, а также в фабриках. Хоть есть и реализация Service Locator, она по факту сделана для того что-бы была. При этом есть возможность задать конкретные зависимости для определенного компонента (читай объекта).

Ну и последнее, я вырвал этот контейнер из CMS'ки, потому что его нужно дать программисту, который будет строить ООП систему в качестве обучения, при этом система должна будет строиться на основе какого-то DI контейнера. Мой контейнер, наверно самый простой из существующих, как и в использовании, так и в изучении.

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

Тесты также обновлены и проходят, качать тут

Кстати, у кого есть годный гайд по git на русском языке, чет он вообще работает не как mercurial

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
T1grOK
Цитата (chee @ 10.04.2016 - 11:27)
Кстати, у кого есть годный гайд по git на русском языке, чет он вообще работает не как mercurial

Скорей наоборот, mercurial работает не как git biggrin.gif Последний удобней и требует меньше телодвижений. https://git-scm.com/book/ru/v1/%D0%92%D0%B2...%BD%D0%B8%D0%B5


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
chee
T1grOK, ну я пока адекватно оценить не могу, мне пока что mercurial удобнее всего так как я в основном с ним и работал, буду смотреть, а то даже ветку с релизом не могу создать laugh.gif


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
chee, а можно услышать почему не Pimple? =)






chee
Ron, недостатки Pimple
1. Ручное конфигурирование, через анонимные функции
2. Использование sl (хотя судя по примерам, в приделах самого контейнера)
3. Сам контейнер нарушает принцим разделения ответственности, точнее позволяет нарушить, это я веду к фиче, которая позволяет хранить в контейнере конфигурационные параметры.

Это не фатальные недостатки, но в моём pet-проекте я не могу себе их позволить.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
bestxp
Цитата (chee @ 11.04.2016 - 09:59)
Ron, недостатки Pimple

3. Сам контейнер нарушает принцим разделения ответственности, точнее позволяет нарушить, это я веду к фиче, которая позволяет хранить в контейнере конфигурационные параметры.


Ну как сказать, эти параметры по сути тоже часть конфигурации конечного класса, и да отчасти и минус и плюс это ручное конфигурирование , но как по мне у него цель быть более быстрым что-ли =)

по мне так он местами даже очень идеален =) местами не хватает тегов как в SymfonyDI
Ron
chee, и снова без документации. =) Как и фреймворк, только тут есть шанс все-таки понять что к чему, потратив лишнее время.

Свернутый текст
Послушай, а своим программистам ты вот так же всё объясняешь, да?
Oyeme
Мог бы посоздавать alias для Cheevauva.
А то за собой тащить такие макороны не удобно.

\Cheevauva\Contract\Container\UseServiceLocator

   if ($object instanceof \Cheevauva\Contract\Container\UseServiceLocator) {
$object->setContainer(new \Cheevauva\Container\ServiceLocator($properties, $this));
return;
}


Не хватает комментариев к коду.Особенно для метода classUsesDeep.
Название метода вообще ничего не говорит.

Не поняты название переменной $tratis

        $traits = array();
do {
$traits += class_uses($class);
} while ($class = get_parent_class($class));
foreach ($traits as $trait => $same) {
$traits += $this->classUsesDeep($trait);
}
return array_unique($traits);



https://github.com/cheevauva/container/blob...a/Container.php

      $object = new $className;
$this->objects[$className] = $object;
$this->handleObject($object);

if ($object instanceof \Cheevauva\Contract\Container\Mediator) {
$this->objects[$className] = $object->get();
}


Не нравится такой подвязанной подход с условиями.

Что-то типо $this->objects[$className] = $object->getClassObject(); подошло бы для всех.
Быстрый ответ:

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