Intereting Posts
Symfony 1.4 Session vs $ _SESSION Проблемы В моем php-скрипте более крупный файл занимает больше времени для загрузки и его привязки max_execution_time Каков ваш опыт работы с Doctrine ORM? CodeIgniter настраивает разные IP-адреса для данных READ и WRITE MySQL Amazon SES Ошибка получения учетных данных с сервера метаданных профиля экземпляра. (Ошибка клиента: 404) Вставить значение динамического значения выбора в базу данных Mysql и показать отправленное сообщение Cakephp выдает ошибку, если массив не разделен Восстановление определенной строки из базы данных в yii Ошибка PHPMailer с вызовом неопределенного метода PHPMailer :: SetFrom () Установка Yosemite / El Capitan php-gd + mcrypt возможно ли создать дубликат ip в этом коде? PHP эхо до функции сна, не работает Примечание. Неопределенная переменная: captcha в C: \ wamp \ projects \ ServiceAdmin \ login \ loginauth.php в строке 11 .htaccess Параметр PHP 5.3 нарушает параметр Access-Control-Allow-Origin? Как объявить глобальную переменную в PHP, которую я могу использовать во всех шаблонах?

Как сделать библиотеки PHP слабо связанными?

У меня есть некоторые библиотеки в моей «инфраструктуре», такие как routing, config, logger, … Я хочу, чтобы они были независимы друг от друга, как это делают некоторые из известных PHP-фреймворков.

Я понимаю все принципы свободной связи, но я не знаю, как следовать как принципам свободной связи, так и сухим. Если я создам библиотеку маршрутизации для этого конфигуратора и регистратора, то я не повторяюсь сам, но если я хочу использовать маршрутизатор самостоятельно, он не будет работать. Точно так же, если я записываю журнал и код конфигурации в свою библиотеку маршрутизации, я бы повторил сам.

Related of "Как сделать библиотеки PHP слабо связанными?"

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

Затем каждый сотрудник может быть заменен другим одним и тем же типом. Код больше не зависит от конкретной реализации одного из них.

Так:

  • Не используй:

    • глобальные (статические) функции

      Foo:bar(); 
    • программирование на основе классов (передача имени класса вокруг)

       stream_wrapper_register("var", "VariableStream"); 
    • глобальные константы

       if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); 
  • Но:

    • Использовать объекты

       $foo->bar(); 
    • Программа против интерфейсов

       public function __construct(LoggerInterface $logger) { 
    • Единичный тест с издевательствами

       $logger = $this->getMock('LoggerInterface', array('log')); 

См. Также:

  • Не будьте STUPID: GRASP SOLID! (Декабрь 2011 года, NikiC)