2012-04-16 72 views
0

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

我见过两个项目使用适配器模式来抽象日志记录(其中之一是Common Infrastructure Library for .NET)。

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

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

但我不确定。

谢谢您的建议。

回答

1

这取决于。

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

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

一个客户端是应用程序试图获取有关其状态进入世界的信息。它不应以任何方式关心配置。

另一个客户端是谁或为您的应用程序设置了环境。该客户端只能在配置时考虑。

因此,您的适配器只适用于第一个客户端是完全为这个客户端。

+0

有了这个观点,对不同的实现有不同的配置似乎是合理的。只要配置是通过文件(而不是通过代码语句)完成的。感谢您的回答。 – SRO 2012-04-16 18:03:57

0

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

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