.net – 日志记录,面向方面的编程和依赖注入 – 试图理解这一切
我知道日志记录是AOP的主要用例。另外,日志包装器也被示例为当你想使用DI,使类不与特定的日志实现耦合的情况。然而,
some consider logging wrappers an anti-pattern.首先,这样的视图是因为在大多数情况下,包装器往往是简单的,并删除了许多特定的日志框架的功能。如果你实现那些特定的功能,为什么不直接使用框架。
我知道Common.Logging的立面,试图抽象出大量的功能log4Net,EntLib,NLog为你。然而,即使在这里,我们仍然有一个依赖于Common.Logging。不是在代码/单元测试方式关于接口等,但如果项目死亡(从上一版本已经过去一年),或者你想后面切换到不支持的日志记录器,这可能会导致问题。 也就是说,如果通过AOP实现日志记录,甚至有必要使用DI来记录日志依赖性(即为什么不直接引用NLog)?是的,代码的AOP部分将紧密耦合,但是想要单元测试的类的逻辑没有日志依赖性(至少在编织发生之前)。在这一点上,我有点失落(我还没有尝试过AOP)。编织后,没有使用DI的AOP代码导致测试方法的单元测试的问题?还是可以一个单元测试而不编织AOP代码? 除非日志记录是软件用户的要求,我不知道测试日志记录是否与mock一起有用。我认为被测方法的业务逻辑是大多数人对测试感兴趣的。最后,如果想使用TDD / BDD,不需要在AOP代码中使用DI来记录依赖关系?或者一个只是不测试驱动AOP的东西? 正如你所看到的,我试图得到一个感觉,开发一个应用程序,最有用的方法是使用AOP交叉关注和DI设计/测试。由于AOP是比较新的,日志记录是最常见的例子,推荐的方法是什么?
日志不是一个服务,它是一个
cross-cutting concern.因此,它最好实现与
Decorator.但是,添加大量装饰只是为了启用各种不同的服务日志记录往往违反
DRY,在这种情况下,你可以进一步发展这些装饰器单个拦截器。
虽然你可以使用IL编织实现AOP,一个更好的选择是使用支持动态拦截的DI容器,因为它是一个更轻量级的解决方案。 这使您能够将具体服务与日志记录完全解耦。在这种情况下,我会说,没有理由包装任何特定的日志框架,因为如果你想改变日志框架,你可以只改变那个单一的拦截器。 Here’s an example谈论装饰和拦截器的仪器(非常类似于日志)。 如果你想了解更多关于AOP和DI,你可以view online this talk I gave at GOTO Copenhagen 2010。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- postgresql – 如何将AWS中的docker容器连接到RD
- flex – 如何将“Null” 传递给ActionScript 3中
- ruby-on-rails – 使jQuery与Turbolinks一起使用
- Oracle架构设计:具有I / O开销的单独架构?
- 使用带有正则表达式的变量来查找mongodb中的数据
- ruby-on-rails – 使用Paperclip进行文件下载
- 笔记3:FileWebRequest 与 FileWebResponse
- Oracle Express中工作空间和数据库用户的关系是什
- 无法创建链接服务器 "ORCL" 的 OLE DB 访
- 使用libxml读取分析配置文件