Как стать автором
Обновить

Комментарии

Скорее статья не для начинающих, а для тех кто любит «поколбасить» своего кода. Товарищи начинающие! Не тратьте время! Берите готовые библиотеки и лучше пишите что-нибудь полезное!
Чтобы узнать как такое вообще писать — статья годная.
Конечно, использование готовых библиотек более правильное решение, но новичкам всё же необходимо «колбасить». Ведь единственный способ научиться программировать — сидеть и программировать.
Да-да, берите готовое решение — не нужно понимать как это работает.
Ну да, тогда уж можно вообще сократить — наймите программиста и пусть это будут его проблемы :)
Можно предложить вариант этой статьи с применением TDD для начинающих.
Программирование ради программирования
IMHO
Годная статья для начинающих! Внесу пару предложений по коду:
  • $isEnable => $isEnabled
  • По моему мнению свойства класса Route должны быть приватными
  • Во многих фреймворках есть устоявшееся название Chain и я бы его использовал Logger => ChainLogger
  • Ну и конечно же скрыть имлементацию списка рутов, зачем клиенту знать что там SplObjectStorage? наружу должен быть доступен метод addLogger
SplObjectStorage, вероятно, чтобы можно было удобно detatch'ить роуты. Но совершенно очевидно, что коллекция должна быть приватная.
Напрашивается ответная статья с исправлениями всех ошибок :)
Методов addLogger, removeLogger и т.п. в Logger нету намеренно, т.к. логер должен логировать. В зону его ответственности не должна входить работа с коллекцией роутов.

Если честно, то Logger и о SplObjectStorage ничего не должен знать, в конструкторе ему тупо должен передаваться Iterator.
Посмотрите на Monolog, там Route — это Handler, и доступны методы pushHandler, popHandler и setHandlers. Так же там разделена ответственность класса Route на Handler и Processor. Handler — знает куда писать, а Processor — форматирует контекст
вы так заботитесь о разделении ответственности (причем странно, так как если там есть список значит надо) что при этом нарушили инкапсуляцию.
  • Тут согласен, моя очепятка
  • Предполагалось, что паблик свойствами будут те, которые можно установить при инициализации роута. Просто косяк в установке этих свойств (устанавливаются и паблик и протектед и приват свойства). А вот методы действительно, не должны быть паблик, мой косяк
  • Возможно и так)
  • Про SplObjectStorage написал выше
НЛО прилетело и опубликовало эту надпись здесь
Потому что помимо syslog надо еще openlog юзать, а значит надо это все инкапсулировать в какой-то сервис. А значит мы берем стандарт psr-3 регламентирующий ткой интерфейс и радуемся. А еще лучше вообще взять monolog, в котором есть хэндлер для syslog.

А еще есть куча случаев когда syslog не катит. Допустим у меня логи кидаются в аргегатор логов напряму (graylog и другие), кто-то любит файлики, кто-то выплевывает их в stderr/stdout docker-контейнера и т.д. И вот за тем что бы у всех все было одинаково хотя бы в плане интерфейса — ввели psr-3.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории