Является ли диаграмма классов UML Zend_Log корректной?
История вопроса
Анализ Zend_Log показывает следующую диаграмму классов
Zend_Log:
- использует ReflectionClass & Zend_Log_Exception
- поддерживает ссылку на массив Zend_Log_Writer_Abstract
- поддерживает ссылки на массив Zend_Log_Filter_Interface
Zend_Log_Writer_Abstract
- поддерживает ссылку на массив Zend_Log_Filter_Interface
- поддерживает ссылку на Zend_Log_Formatter_Interface
Вопросы
- Zend_Log_Filter_Interface связан с Zend_Log_Filter_Suppress, Zend_Log_Filter_Message & Zend_Log_Filter_Priority, как изображено, правильно ли это изложено в диаграмме классов?
- Можно ли сказать, что Zend_Log содержит ссылку на массив Zend_Log_Filter_Interface, и это композиционные отношения (аналогично Zend_Log_Writer_Abstract)?
- Очевидно, что Zend_Log_Filter_Interface содержится в Zend_Log и Zend_Log_Writer_Abstract, в то время как Zend_Log содержит Zend_Log_Writer_Abstract, что делает Zend_Log_Filter ссылкой на оба контейнера (Zend_Log) и содержится (Zend_LogAWerter); это какой-то "Шаблон дизайна", если да, то как называется?
С уважением!
1 ответ
Zend_Log_Filter_Suppress
,Zend_Log_Filter_Message
, а такжеZend_Log_Filter_Priority
все реализуютZend_Log_Filter_Interface
интерфейс. Это обозначается с помощью пустой стрелки и пунктирных линий между ними. То же самое верно дляZend_Log_Formatter_Interface
и три класса, изображенные ниже.Да, это правильно. Использовать ли здесь ассоциацию (->) или композицию, можно обсудить, так как два
Zend_Log
экземпляры могут разделить одинZend_Log_Writer_Db
пример. Поскольку авторы и фильтры определяют общее поведение журнала, состав имеет смысл для меня.Каждый экземпляр журнала может писать нескольким авторам. Сообщения сначала фильтруются самим журналом, и любое проходящее сообщение отправляется каждому автору. Каждый писатель также фильтрует входящие сообщения. Это позволяет игнорировать все сообщения ниже
WARN
приоритет (на уровне журнала), который записывается в файл и далее ограничивает ведение журнала базы данных теми наFATAL
уровень. Этого же эффекта можно добиться, отбросив массив фильтров уровня журнала, но для этого потребуется дублирование фильтрации в каждом модуле записи.