Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (8) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Мой DI контейнер
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




Извлёк из своей CMS контейнер для внедрения зависимостей, покрыл тестами, задал новый неймспейс. Позже разберусь с оформлением репозитория.

Собственно сабж: https://packagist.org/packages/cheevauva/container
Пример использования: https://github.com/cheevauva/container/blob...ntainerTest.php


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Ну молодец, чо.

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

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

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




Потому что идеология моего решения разительно отличается от других. Если коротко, то в самом приложении построенном на этом контейнера, сам контейнер можно увидеть в двух местах: где инициализируемый он сам и критические зависимости, а также в фабриках. Хоть есть и реализация Service Locator, она по факту сделана для того что-бы была. При этом есть возможность задать конкретные зависимости для определенного компонента (читай объекта).

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




Изменения:
- Удаление поддержки логических зависимостей

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

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2758
Пользователь №: 24406
На форуме: 6 лет, 5 месяцев, 10 дней
Карма: 177




Цитата (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
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




T1grOK, ну я пока адекватно оценить не могу, мне пока что mercurial удобнее всего так как я в основном с ним и работал, буду смотреть, а то даже ветку с релизом не могу создать laugh.gif


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1201
Пользователь №: 41686
На форуме: 1 год, 7 месяцев, 18 дней
Карма: 21




chee, а можно услышать почему не Pimple? =)








--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




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

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2050
Пользователь №: 36605
На форуме: 4 года, 1 месяц, 11 дней
Карма: 112




Цитата (chee @ 11.04.2016 - 09:59)
Ron, недостатки Pimple

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


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

по мне так он местами даже очень идеален =) местами не хватает тегов как в SymfonyDI


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1201
Пользователь №: 41686
На форуме: 1 год, 7 месяцев, 18 дней
Карма: 21




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

Свернутый текст
Послушай, а своим программистам ты вот так же всё объясняешь, да?


Это сообщение отредактировал Ron - 11.04.2016 - 11:17


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1709
Пользователь №: 16955
На форуме: 8 лет, 1 месяц, 3 дня
Карма: 96




Мог бы посоздавать 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(); подошло бы для всех.


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




Oyeme, не алиасы я не хочу, не нравятся они мне, лишний код по субъективным причинам.


Цитата (Oyeme @ 11.04.2016 - 11:32)
Не хватает комментариев к коду.Особенно для метода classUsesDeep.
Название метода вообще ничего не говорит.

Окей, тут я согласен, буду переименовывать. Документация мне кажется излишней. Кстати, вроде бы этот код, я откуда-то скопипастил biggrin.gif

Цитата (Oyeme @ 11.04.2016 - 11:32)
Не нравится такой подвязанной подход с условиями. Что-то типо $this->objects[$className] = $object->getClassObject(); подошло бы для всех.

Вот тут я не очень панимаю, не нравится, что метод называется get, или то что я в зависимости от интерфейса подменяю зависимость?



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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




Цитата (Ron @ 11.04.2016 - 11:15)
и снова без документации. =)

Вся документация представлена тестами, я тесты только для этого и написал, что бы было понятно как использовать. Но я подумаю о том что бы в readme пихнуть лайтовый пример.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1709
Пользователь №: 16955
На форуме: 8 лет, 1 месяц, 3 дня
Карма: 96




Цитата
Вот тут я не очень панимаю, не нравится, что метод называется get, или то что я в зависимости от интерфейса подменяю зависимость?


Oбщий interface сделать для Mediator,UseServiceLocator.
Разные реализации но с общим interface.

Иначе все упирается в условия.А если мы еще добавим пару разных реализаций,то будет каша.

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


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1860
Пользователь №: 38654
На форуме: 3 года, 2 месяца, 24 дня
Карма: 41




Oyeme, но ведь не всем посредницам нужны SL, как и не везде где нужен SL, нужен функционал посредника.

Или ты намекаешь на \Cheevauva\Contract\Container\MediatorWithServiceLocator, но это помоему бред

Цитата (Oyeme @ 11.04.2016 - 15:51)
.А если мы еще добавим пару разных реализаций,то будет каша.

не очень понятно, почему будет каша, было бы не плохо примером показать.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (8) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса