Инструменты пользователя

Инструменты сайта


limb3:ru:packages:toolkit:lmb_toolkit

lmbToolkit

Dynamic Service Locator реализован в виде lmbToolkit, который мы называем иногда инструментарием или просто тулкит. lmbToolkit выполнен в виде одиночки (Singleton). Это по сути единственный синглтон в ядре Limb. Для получения объекта из lmbToolkit будет использоваться приблизительно такой код:

$toolkit = lmbToolkit :: instance();
$request = $toolkit->getRequest();

Или:

$request = lmbToolkit :: instance()->getRequest();

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

$toolkit = lmbToolkit :: save();
 
$tree = $toolkit->getTree();
$request = $toolkit->getRequest();
 
lmbToolkit :: restore();

При сохранении (save) lmbToolkit происходит создание новой свежей копии инструментария (всего набора инструментов), которая становится текущей, а старый набор сохраняется в lmbRegistry. При восстановлении (restore) происходит удаление новой копии и текущим становится старый инструментарий.

Инструментарий состоит из наборов инструментов (Tools). lmbToolkit может в себе хранить множество различных наборов инструментов. По умолчанию в пакете есть только несколько абстрактных и утилитарных классов для создания своих наборов инструментов.

Tools можно легко добавлять, заменять, объединять с другими наборами внутри lmbToolkit. Например:

  • lmbToolkit :: setup($tools) - заменяет набор инструментов в текущем toolkit.
  • lmbToolkit :: merge($tools) - объединяет набор инструментов с существующим наборов в текущем toolkit-е. Новые инструменты имеют больший приоритет.
  • lmbToolkit :: extend($tools) - расширяет toolkit новым набором инструментов, однако если в toolkit-е какие-ибо инструменты уже существовали, будут сгенерирована исключительная ситуация.

Наборы инструментов реализуют интерфейс lmbToolkitTools состоящий из метода getToolsSignatures, который возвращает массив методов, который поддерживает данный набор инструментов. Этот массив имеет такую структуру:

 array('method1' => $object,
       'method2' => $object);

То есть название метода и ссылка на объект, который этот метод поддерживает.

На самом деле lmbToolkit не содержит никаких дополнительных методов, кроме служебных для управления инструментами. Все остальные методы он делегирует наборам инструментов (tools). Таким образом, клиенты зависят только от lmbToolkit, но не от конкретных tools. Это позволяет нам заменять, изменять поведение инструментов, не затрагивая клиентов, таким образом мы снижаем зависимости внутри системы.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   __ __ ______   ____   __  ___  _   __
  / // //_  __/  / __/  /  |/  / | | / /
 / _  /  / /    / _/   / /|_/ /  | |/ / 
/_//_/  /_/    /___/  /_/  /_/   |___/
 
limb3/ru/packages/toolkit/lmb_toolkit.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)