在考虑敏捷软件开发和所有原理(SRP,OCP等)时,我问自己如何对待日志记录。
在实现旁边记录是否违反SRP?
我会说,yes
因为该实现也应该能够运行而无需登录。那么如何更好地实现日志记录呢?我检查了一些模式,得出的结论是,最好不要以用户定义的方式违反原则,而是使用已知违反原则的任何模式的最佳方式是使用装饰器模式。
假设我们有一堆完全没有违反SRP的组件,然后我们想要添加日志记录。
- 成分A
- 组件B使用A
我们想要记录A,因此我们创建了另一个装饰有A的组件D,都实现了接口I。
- 接口我
- 组件L(系统的日志记录组件)
- 组件A实现I
- 组件D实现I,修饰/使用A,使用L进行日志记录
- 组件B使用I
优点:-我可以不使用日志就使用A-测试A意味着我不需要任何日志模拟-测试更简单
缺点:-更多组件和更多测试
我知道这似乎是另一个公开讨论的问题,但我实际上想知道是否有人使用的记录策略比装饰器或SRP违规更好。作为默认NullLogger的静态单例记录器又如何呢?如果需要syslog-logging,则在运行时更改实现对象?