Zend_Log的UML类图是否正确?

Ahm*_*mon 5 uml zend-framework class-diagram class 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有关,如图所示,这是否在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)引用; 是一些"设计模式",如果是的话是什么名字?

问候!

Dav*_*ess 2

  1. Zend_Log_Filter_SuppressZend_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级别的日志记录。您可以通过删除日志级别过滤器数组来实现相同的效果,但这需要在每个写入器中重复过滤。