ФорумПрограммированиеPHP для идиотов → класс registry применительно к мемкешу

класс registry применительно к мемкешу

  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 19 февраля 2010 г. 11:20, спустя 3 часа 47 минут 41 секунду

    я не смог дальше 48 слайда просмотреть. Стало сложно и уже было поздно - я пошел спать. О DI слышал и раньше, но цель ее применения была абсолютно не ясна. Сейчас что-то начинает проясняться.

    Мне кажется, что DI работает только в частных случаях.

    Есть у меня такое дело:
    class Module_Forum_TopicManager extends Module_Forum_Common implements ModuleInterface
    {
    protected $external = 'Module_Forum_External';
    // …
    protected function __construct()
    {
    $this->boardId = Request::get('boardId'); // жесткая зависимость ? вроде как да
    $this->userId = User::instance()->getBaseInfo('id'); // жесткая зависимость ? вроде как да
    $this->db = Database::getInstance(); // жесткая зависимость ? вроде как да
    $this->f = new Module_Formatter_Class(); // жесткая зависимость ? скорее нет, чем да. Это зависимость не на уровне ядра а на уровне приложения
    $this->external = new $this->external; // жесткая зависимость ? как и в предыдущем случае, но тут мы можем повелевать названием класса)
    }


    Итак, эта хрень вызывается автоматически после распарсивания URL. ModuleInterface содержит __construct и __process

    Что дальше? Стало быть я должен добавать N методов в стиле setDatabase(DatabaseInterface $db);?? И каждый раз при запуске модуля отправлять в них данные?


    Вот он пишет, что хочу создать инстанцию FileCache и отправить ее в какой-то класс… Зачем? Я бы делал Cache_Files, причем __construct был бы протектед. И только главный класс для работы с кешем мог бы создать его инстанцию. У нас есть Cache, все операции, в т.ч. выбор машины кеширования происходят только через него.
    Спустя 276 сек.
    а, да. Частные случаи: библиотеки. Вот в его Twig'е как нельзя кстати использование DI. В том же Zend_Mail удобно таким образом задавать транспорт письма
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 19 февраля 2010 г. 12:04, спустя 44 минуты 34 секунды

    Если класс упоминается явно — это большая зависимость. Если упоминается (или подразумевается) только интерфейс класса, то зависимость слабая и это хорошо.
    Чтобы прогнать тесты для одного класса, стараются избавиться от остального окружения, сделать "заглушки" вместо объектов. При сильных связях это сделать непросто, а при D.I. уже проще. Внедрять зависимости можно по разному, не только через параметры конструктора и Фабьен вскользь об этом упоминает.
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 19 февраля 2010 г. 12:27, спустя 22 минуты 33 секунды

    http://wiki.agiledev.ru/doku.php?id=ooad:dependency_injection
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 19 февраля 2010 г. 14:43, спустя 2 часа 15 минут 30 секунд

    видел. Пытался прочитать, осилил только треть. Буду штурмовать еще разок

Пожалуйста, авторизуйтесь, чтобы написать комментарий!