c – 如何实现应用程序事件记录器

在我的应用程序中,需要记录应用程序中发生的各种事件.

例如,我需要记录从服务器下载文件的事件,并指定下载时间,服务器IP地址等.

从结构上讲,所有数据都分布在应用程序的各个类中.

我的解决方案是创建一个单例类,将其命名为“ApplicationEvents”,并在其中处理应用程序事件.对于
例:

void OnFileDownloaded() {
    ...
    ApplicationEvents::Instance()->FileDownloaded(fileId_);
}

但这看起来像代码中的混乱,几乎不可能测试.

替代解决方案是在main函数中创建ApplicationEvent并将其作为参数传递给类构造函数.
为避免代码混乱,可以使用装饰器或代理模式.

例如:’FileDownloader’和装饰类’LoggingFileDownloader’.
但是应用程序的结构会更复杂,许多类只会将指向ApplicationEvents的指针传递给其他类,并且可能在我的情况下是过度的.

哪种解决方案最好?

最佳答案 我不明白为什么这是不可能测试的.您应该在应用程序之外测试您的日志记录模块,并在验证后立即使用它.您不必与应用程序一起测试它.此外,它接收普通代码,使用Singleton只是对您的代码进行一次调用.一种替代方法是使用发布/订阅(或观察者)来发布消费事件但是它将更加抽象并且难以遵循冷却调试我会认为它仅适用于其他类型的场景,例如,许多订阅者感兴趣在某些事件上.其他更激进的方法是使用AOP,因为伐木是交叉问题的更常见的例子,但杉木C只有少数经验库冷杉AOP.

点赞