我需要创建一个简单的系统来抽象日志平台。我的想法是,我希望能够通过一些配置来交换或激活日志平台(nlog、log4net、enterprise library) (这应该不是问题)。我知道,我需要为我想要支持的每个平台设置一个包装器,以加载必要的dll并创建记录器。
我正在考虑创建一个抽象类或接口,提供最常见的方法,如Log、Debug、Trace等:
interface ILogger
{
void Log(...);
void Debug(...);
// etc.
}
class NLogPlatform : ILogger
{
// create nlog, load config etc.
}
class Log4NetPlatform : ILogger
{
// create log4net, load config etc.
}
class LoggerFactory
{
public static CreateLogger(...)
{
// read settings and create a logger.
}
}起初,我想到了一个日志提供程序,但是后来我发现提供程序根本不是一个模式,所以我看了一下.NET设计模式,但是这里似乎没有什么是合适的。我错过了什么吗?还是没有什么规律?
我还没有真正开始,因为这一次我宁愿从一开始就朝正确的方向前进,然后再重构几个工具。
请你告诉我,在设计这样一个系统时,我应该考虑什么,以及是否有这样的模式?
发布于 2015-02-13 18:55:04
祝贺您,您已经(重新)发现了对象适配器模式。您有一个目标接口(此处:ILogger)和各种适配器类NLogPlatform、Log4NetPlatform、…。每个适配器类都符合目标接口,并代理作为成员包含的适配器对象的所有调用。
如果您想更清楚地使用这种模式,我将调用适配器类NLogAdapter等。
使用工厂注入正确的日志适配器完全是正交的,并且是关于依赖反转原则的。
发布于 2015-02-13 19:09:49
https://softwareengineering.stackexchange.com/questions/273157
复制相似问题