我知道日志记录是AOP的主要用例。另外,日志记录包装器还作为您要使用DI的情况的示例,以便类不与特定的日志记录实现耦合。但是,有些人认为记录包装器是反模式。首先,这种观点是因为在大多数情况下,包装器趋于简单化并删除了日志记录框架特有的许多功能。如果要实现这些特定功能,为什么不直接使用框架。
我知道Common.Logging门面尝试为您抽象出log4Net,EntLib和NLog的大量功能。但是,即使在这里,我们仍然对Common.Logging有所依赖。不是以关于接口等的代码/单元测试方式进行的,而是如果项目终止(自上一个发行版以来已经一年多了),或者您希望稍后切换到不受支持的记录器,则可能会导致问题。
也就是说,如果通过AOP实现日志记录,是否甚至有必要使用DI作为日志记录依赖项(即,为什么不直接引用NLog)呢?是的,代码的AOP部分将紧密耦合,但是一个人要进行单元测试的类的逻辑没有日志依赖(至少在编织发生之前)。在这一点上,我有点迷茫(我还没有尝试过AOP)。编织后,未将DI用于AOP代码是否会对单元测试被测方法造成问题?还是可以在不编写AOP代码的情况下进行一次单元测试?
除非软件用户需要日志记录,否则我不确定测试使用模拟进行日志记录有多大用处。我认为被测方法的业务逻辑是大多数测试所感兴趣的。最后,如果要使用TDD / BDD,是否就不必使用DI来记录AOP代码中的日志依赖项?还是只是不试驾 AOP呢?
如您所见,我正在尝试了解最实际的方法是开发一种应用程序,该应用程序将同时使用AOP来解决交叉问题,并使用DI来进行设计/测试。由于AOP相对较新,并且日志记录是最常见的示例,因此推荐的方法是什么?
倚天杖
慕桂英4014372