应该将日志记录类作为依赖项插入还是应该使用静态方法

时间:2013-11-13 06:01:58

标签: c# oop design-patterns

我知道日志记录是一个跨领域的问题,我通常使用AOP记录任何错误或异常。但是,我面临的情况是,我们还必须记录有关所执行的各种操作的特定信息,例如,当操作成功时我们也必须记录该操作,如果来自Web服务的响应无效,我们还必须记录某些内容。这意味着在某些情况下,记录事件会成为业务流程的一部分,在这些特定情况下,它不是一个跨领域的问题。

为了处理这种情况,我创建了一个DBLogger类,它只是将一些动态消息和错误代码写入数据库。

目前我通过ILogger接口的依赖注入使用DBLogger类。当我查看我的代码时,似乎有一种代码味道让我看到我在每个需要记录业务规则违规的类中注入此类。我正在考虑使DBLogger类静态并直接使用它而不是注入它。这将删除代码混乱一点,我的构造函数将是干净的,但依赖将仍然存在。

我的问题是处理此类场景的推荐方法和最佳做法是什么?在这种情况下,OOP和设计模式如何能够阻止我违反开放式已关闭的主体? < / p>

2 个答案:

答案 0 :(得分:3)

我喜欢为了单元测试而注入记录器。它可以更轻松地模拟记录器,并避免在单元测试中定义真实记录器的依赖关系。

此外,如果您的IOC容器已经为您定义了它,那么它是透明的,并且更少注入它。

答案 1 :(得分:0)

'...在某些情况下,记录事件特别成为业务流程的一部分,在这些特定情况下,它不是一个跨领域的问题。'

听起来应该进行单元测试。因此应该注射。

考虑装饰,或者作为TGH亮点,考虑降低噪音​​的基类。