Zend_Log的UML类图是否正确?

时间:2010-09-07 01:30:39

标签: zend-framework class uml class-diagram 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
  • 的引用

alt text

问题

  1. Zend_Log_Filter_Interface与Zend_Log_Filter_Suppress,Zend_Log_Filter_Message&如图所示,Zend_Log_Filter_Priority是否在Class Diagram中正确布局?
  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_Log_Writer_Abstract)引用;是一些“设计模式”,如果是的话是什么名字?
  4. 问候!

1 个答案:

答案 0 :(得分:2)

  1. Zend_Log_Filter_SuppressZend_Log_Filter_MessageZend_Log_Filter_Priority都实现了Zend_Log_Filter_Interface界面。这用空箭头和它们之间的虚线表示。 Zend_Log_Formatter_Interface和下面描述的三个类也是如此。

  2. 是的,这是正确的。是否在这里使用关联( - >)或组合可能会有争议,因为两个Zend_Log实例可以共享一个Zend_Log_Writer_Db实例。由于编写器和过滤器决定了日志的整体行为,因此组合对我来说很有意义。

  3. 每个日志实例都可以写入多个编写器。消息首先由日志本身过滤,任何传递的消息都会传递给每个编写器。每个编写器也会过滤传入的消息。这允许您忽略低于WARN优先级(在日志级别)写入文件的所有消息,并进一步限制数据库记录到FATAL级别的数据库。您可以通过删除日志级别的过滤器数组来实现相同的效果,但它需要复制每个编写器中的过滤。