Является ли диаграмма классов 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

альтернативный текст

Вопросы

  1. Zend_Log_Filter_Interface связан с Zend_Log_Filter_Suppress, Zend_Log_Filter_Message & Zend_Log_Filter_Priority, как изображено, правильно ли это изложено в диаграмме классов?
  2. Можно ли сказать, что Zend_Log содержит ссылку на массив Zend_Log_Filter_Interface, и это композиционные отношения (аналогично Zend_Log_Writer_Abstract)?
  3. Очевидно, что Zend_Log_Filter_Interface содержится в Zend_Log и Zend_Log_Writer_Abstract, в то время как Zend_Log содержит Zend_Log_Writer_Abstract, что делает Zend_Log_Filter ссылкой на оба контейнера (Zend_Log) и содержится (Zend_LogAWerter); это какой-то "Шаблон дизайна", если да, то как называется?

С уважением!

1 ответ

Решение
  1. Zend_Log_Filter_Suppress, Zend_Log_Filter_Message, а также Zend_Log_Filter_Priority все реализуют Zend_Log_Filter_Interface интерфейс. Это обозначается с помощью пустой стрелки и пунктирных линий между ними. То же самое верно для Zend_Log_Formatter_Interface и три класса, изображенные ниже.

  2. Да, это правильно. Использовать ли здесь ассоциацию (->) или композицию, можно обсудить, так как два Zend_Log экземпляры могут разделить один Zend_Log_Writer_Db пример. Поскольку авторы и фильтры определяют общее поведение журнала, состав имеет смысл для меня.

  3. Каждый экземпляр журнала может писать нескольким авторам. Сообщения сначала фильтруются самим журналом, и любое проходящее сообщение отправляется каждому автору. Каждый писатель также фильтрует входящие сообщения. Это позволяет игнорировать все сообщения ниже WARN приоритет (на уровне журнала), который записывается в файл и далее ограничивает ведение журнала базы данных теми на FATAL уровень. Этого же эффекта можно добиться, отбросив массив фильтров уровня журнала, но для этого потребуется дублирование фильтрации в каждом модуле записи.

Другие вопросы по тегам