0

我们正在讨论使用适配器模式进行日志记录。我不确定这是一个好主意,因为我们可能永远不会改变我们的日志实现,但是当我们谈到这个时出现了一个问题:抽象日志模块是否应该隐藏各种日志实现的配置细节?

我见过两个项目使用适配器模式来抽象日志记录(其中一个是.NET 的通用基础结构库)。

在这两个项目中,客户端必须提供的配置取决于日志记录实现。例如,如果使用 log4net,客户端必须提供 Log4Net 配置文件。

当我认为这是适配器模式的不完整实现时,我错了吗?对我来说,如果客户必须对适配者有一些了解,那么在不破坏客户的情况下就不可能交换实现......

但我不确定。

感谢您的意见。

4

2 回答 2

1

这取决于。

总的来说,我同意。如果客户端不需要特定的特定服务实现来使用它,尽管客户端正在使用某种抽象,那么抽象就会被破坏。

但在你的情况下,我认为你混淆了日志库的两个不同客户端。

一个客户端是试图将有关其状态的信息传递给世界的应用程序。它不应该以任何方式与配置有关。

另一个客户是为您的应用程序设置环境的人或任何人。此客户端应仅与配置一起考虑。

因此,您的适配器仅适用于第一个客户端,此客户端已完成。

于 2012-04-16T07:48:19.220 回答
0

可以肯定地说,为了纯粹的抽象目的,适配器应该隐藏任何特定于适配器的实现细节。理想情况下,它应该指定类似“配置”方法的基本配置选项,这些选项应该被翻译成特定的选项(如果可能的话)。

然而,在许多情况下,这可能是极端的。

于 2012-04-16T07:40:35.293 回答