我们正在谈论使用适配器模式进行日志记录。我不确定这是一个好主意,因为我们可能永远不会改变我们的日志记录实现,但是当我们谈到这个问题时出现了一个问题:抽象日志记录模块是否应该隐藏各种日志记录实现的配置细节?
我见过两个项目使用适配器模式来抽象日志记录(其中一个是Common Infrastructure Library for .NET)。
在这两个项目中,客户端必须提供的配置取决于日志记录实现。例如,如果使用log4net,客户端必须提供Log4Net配置文件。
当我认为这是适配器模式的不完整实现时,我错了吗?对我来说,如果客户必须对适配器有一些了解,那么在不破坏客户端的情况下交换实现是不可能的......
但我不确定。
感谢您的建议。
答案 0 :(得分:1)
取决于。
总的来说,我同意。如果客户端不需要特定的特定服务实现来使用它,尽管客户端使用某种抽象,那么抽象就会被破坏。
但是在你的情况下,我认为你混淆了日志库的两个不同客户端。
一个客户端是试图向世界提供有关其状态的信息的应用程序。它不应该以任何方式与配置有关。
另一个客户端是为您的应用程序设置环境的人或任何人。此客户端只应考虑配置。
因此,您的适配器仅适用于此客户端的第一个客户端。
答案 1 :(得分:0)
可以肯定地说,适配器应隐藏任何特定于Adaptee的实现细节以用于纯抽象目的。理想情况下,它应该使用基本配置选项指定类似“配置”的方法,这些选项应转换为特定的选项(如果可能的话)。
然而,在许多情况下,这可能是极端的。