【发布时间】:2020-10-01 17:33:24
【问题描述】:
我正在使用类 LoggerProvider 来提供 ILogger。对于 ILogger 的每个具体实现,我都使用特定的命名方法。我在想结构,我能说这个provider类是工厂类吗?
public class LoggerProvider
{
public static ILogger GetDbLogger()
{
return new DBLogger();
}
public static ILogger GetEmailLogger(string email)
{
return new EmailLogger(email);
}
public static ILogger GetTxtLogger()
{
return new TxtLogger(new BaseTxtLoggerConfiguration(), ProjectManager.GetInstance().GetCurrentProjectSettings());
}
}
public class CustomerOneService
{
private readonly ILogger _logger;
public CustomerOneService()
: this(LoggerProvider.GetDbLogger())
{ }
public CustomerOneService(ILogger logger)
{
_logger = logger;
}
public void Import()
{
// some operation with _logger
}
}
public class CustomerTwoService
{
private readonly ILogger _logger;
public CustomerTwoService()
: this(LoggerProvider.GetTxtLogger())
{ }
public CustomerTwoService(ILogger logger)
{
_logger = logger;
}
public void CopyData()
{
// some operation with _logger
}
}
因为如果我正确理解 Factory 的目的,它用于提供特定接口的实例,但在运行时决定将从 Factory 返回哪个具体实现,例如从用户界面输入的一些输入作为参数传递给工厂。但另一方面,另一个目的是提供实例并处理创建对象的问题——当客户端不关心实例是如何创建的时。我的提供者应用了第二个原则,但不是第一个。
我查看了文章Difference between a Factory, Provider and a Service?,但根据工厂和供应商的定义,我仍然不确定哪一个是正确的。
【问题讨论】:
-
尝试为
Import和CopyData方法编写单元测试。 -
@AlexanderPetrov 我认为这现在会是个问题,但我认为对于这个例子来说没关系,不是吗?我将更新服务中的代码以使其可测试。
-
您使用的是 .NET Framework 吗?还是核心?
-
@CaseyCrookston .NET 框架
标签: c# design-patterns factory