Boroda aka Hamster (fantaseour) wrote,
Boroda aka Hamster
fantaseour

Category:

Хотел ответить на комментарий к моему посту про DI, но в размер не уложился. Поэтому отвечу постингом.

Комментарий ezdakimak:

Вообще я не люблю Push метод передачи объектов. У меня преобладает Pull по типу

<?php
public function __construct(){
  
$this->db=CMS()->DB()->getDB();
}

Насчет push-pull. Для соединения с БД и подобного рода "звездных" объектов разумно устраивать такой Registry или Service Locator. В симфони подобный вашему CMS классу класс называется Context. Но часто нужны более "локальные объекты" и пихать их в контекст как-то странно и неуклюже.

Например у меня есть класс Report, который рендерит sql запрос ну и наследники, которые рендерят список объектов, обращаясь к модели. И вот такому классу было разумно пушить внутрь ReportFilter — объект, который устраивает разные виды отчетов — зебра, многоколоночный, вывод ячеек в порядке Z или в порядке N, таблица со "стертыми" границами и т.д.

<?php
$myReport
= new colesoDBReportLite(dirname(__FILE__).'/flat_column_template.tset.phtml');
 
$flatColumnFilter= new colesoFlatColumnOutputFilter();
$flatColumnFilter->outputType='Z'//вывод слева направо и сверху вниз
$flatColumnFilter->setColumns(5);
 
$myReport->setOutputFilter($flatColumnFilter);
$html2=$myReport->renderSQL($sql);
Но такой способо малость громоздкий. Теперь с помощью контейнера DI я смогу сильно сократить этот код. Просто запросив
<?php
$rc
=new ReportContainer(array(
  
'filter.type' => 'FlatColumn',
  
'filter.outputType' => 'Z',
  
'filter.columns'    => '5',
  
'report.template' => 'pathToTemplate'
));

$report=$rc->getRender($sql);

Таким образом я прячу зависимости report от filter в конфигиурацию контейнера. И получаю некоторую свободу.

Я пожалуй переведу страничку от доки к Phemto — DI контейнеру от Маркуса Бэйкера, который сделал SimpleTest. Там немножко под другим углом и библиотека совсем миниатюрная. Взгляни на нее, только не на ту доку, что на сайте, а на ту, что внутри дистрибутива.

Tags: development, di, php, symfony
Subscribe

  • Youtube

    Вначале этого года я готов был написать хвалебную оду Youtube, поскольку запросто мог давать ссылки на какую-нибудь музыку, которая мне нравится на…

  • HATE. FUCK SONY BMG

    Теперь ложка дегтя к бочке меда. В предыдущем посте я написал про замечательный концерт. С dvd диском идет еще audio диск с композициями в live…

  • Dido Live

    Dido Live (DVD/CD Set) (2005) Это концерт в Академии Брикстон в лондоне во время мирового тура Дайдо в 2004 году. Это совершенно…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments