Как сделал я в одном из проектов:
1. У нас есть один объект Application который создаётся один раз в глобальном пространстве имён.
2. У нас есть абстрактный класс Application_Object:
abstract class Application_Object {
/**
*
* @var \Library\Application
*/
public $application = null;
public function afterConstruct() {}
final public function __construct($ParentObject) {
switch (true) {
case ($ParentObject InstanceOf Application_Object):
$this->application = $ParentObject->application;
break;
case ($ParentObject InstanceOf Application):
$this->application = $ParentObject;
break;
}
if (is_null($this->application)) {
throw new Application_Exception("ParentObject must be an instance of Application or Application Object");
От него я уже наследую абсолютно всё, что относится к проекту: Модели, Контроллеры и всё остальное. Например в контроллере можно создать модель просто написав new Model($this); вместо new Model().
Зато в любом месте можно вытащить например $this->application->getDb()->query(....);
Может быть это и есть dependency injection, но такой подход меня во всём устраивает. Если есть критика, могу выслушать :)
И это коммерческий продукт?) Да в моём самописном магазине (причём это первый продукт), с быдлокодом и то на самую тяжёлую страницу (вывод всех товаров категории, как раз таки описанный случай с /all/ имеет порядка 10-15 запросов, расширенный поиск так вообще почти на каждой странице присутствует, могу дать ссылку посмотрите :) Интернет-магазин ноутбуков, правда без оплаты безналом.
Забыл отметить. Программа универсальна, и из-за этого немного показаться может сложной при настройке. То есть она изначально не заточена конкретно под uTorrent, можно регулировать активность любой программы с помощью неё.
Было бы просто идеально сделать так, чтобы при обнаружении посторонней сетевой активности (браузер, игры и проч.) uTorrent автоматически бы снижал скорость или вообще стопился (если это например IP-телефония. Соответственно потом при отсутствии активности скорость автоматически возвращалась бы на исходные позиции.
Я в своё время писал такую программу в качестве дипломного проекта, и могу даже поделиться :-) Но на неё нет никакой документации и она плохо работает на Windows 7 из-за неподдержки этой системы драйвером перехвата сетевого трафика, который я использовал (ntkernel.com).
1. У нас есть один объект Application который создаётся один раз в глобальном пространстве имён.
2. У нас есть абстрактный класс Application_Object:
От него я уже наследую абсолютно всё, что относится к проекту: Модели, Контроллеры и всё остальное. Например в контроллере можно создать модель просто написав new Model($this); вместо new Model().
Зато в любом месте можно вытащить например $this->application->getDb()->query(....);
Может быть это и есть dependency injection, но такой подход меня во всём устраивает. Если есть критика, могу выслушать :)
Я в своё время писал такую программу в качестве дипломного проекта, и могу даже поделиться :-) Но на неё нет никакой документации и она плохо работает на Windows 7 из-за неподдержки этой системы драйвером перехвата сетевого трафика, который я использовал (ntkernel.com).
file.qip.ru/file/97153604/2ab9ba21/trafficmeter.html — вот тут можно скачать то, на чём разработка пока остановиласью В архиве краткий мануал по установке.