【发布时间】:2016-12-16 07:58:04
【问题描述】:
这更像是一个设计问题,我希望我能清楚地表达我的问题。
我有一个复杂的过程,需要记录消息。当其中一些日志被写入时,会引发一个事件,我需要对此做出响应。
问题是在此过程中从不同的类调用 CreateLog 方法,目前我的代码仅捕获从第一个类 (MyForm) 引发的事件。
是否有更好的设计让我可以响应该类的所有事件?
希望下面的伪代码能对我的问题有所启发。
文件 1:
Class CreateLog
{
Log Message
Raise event
}
文件 2:
Class MyForm
{
private CreateLog _log = new CreateLog();
void StartProcess()
{
Do stuff
Call _log.LogMessage //1
Call MethodB()
Call MethodC()
}
void MethodB()
{
Call _log.LogMessage //2
}
void RespondToEvent
{
//Show Progress on screen
}
}
文件 2:
Class AnotherClass
{
void MethodC()
{
_log2.LogMessage() //3
}
}
因此,当我运行此程序时,nr 1 和 2 处的消息日志将触发 RespondToEvent() 方法,但显然不会在 nr 3 处触发,因为它是 CreateLog 类的不同实例。 一种解决方案是将 _log 作为参数传递给 MehodC,但这并不是最好的解决方案。
除了将所有内容添加到 1 个类中之外,还有其他干净的方法吗?
【问题讨论】:
-
如果您有两个不同的日志类实例,会阻止您有两个不同的事件处理程序来处理日志
-
有效问题:File2 中的类是需要更新进度条/表格的 Winforms。 File3 可以从 File2 和 File4 中调用。 File4 需要更新其他内容。所以,是的,AnotherClass 可以有它自己的事件处理程序,但是它的行为应该与调用它的位置不同。