问题背景
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是否在Class Diagram中正确布局?
- 可以这么说,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_Log_Writer_Abstract)引用;是一些“设计模式”,如果是的话是什么名字?
醇>
问候!
1 个答案:
答案 0 :(得分:2)
-
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
级别的数据库。您可以通过删除日志级别的过滤器数组来实现相同的效果,但它需要复制每个编写器中的过滤。
醇>