5

问题背景

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_Log_Writer_Abstract);那是一些“设计模式”,如果是的话,它的名字是什么?

问候!

4

1 回答 1

2
  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级别的那些。您可以通过删除日志级别过滤器数组来实现相同的效果,但它需要在每个写入器中复制过滤器。

于 2011-02-07T01:01:50.497 回答