我有两个类编码为单个接口IStore,其中一个方法是StoreData(数据) - 一个类将数据发送到写入DB的Web服务,另一个类将数据直接写入DB。 (工厂模式)
public IStore GetStorageClass(StorageType type)
{
if (type == StorageType.WebService)
return new WebService();
else
return new DatabaseStore();
}
现在,DatabaseStore类需要一个连接字符串才能工作。 问题是,谁负责提供连接字符串到DatabaseStore以及如何?我想到了:
工厂只知道要传递给DatabaseStore的连接字符串
DatabaseStore构造函数从最终用户提供的配置中读取它。
GetStorageClass的调用者虽然不知道确切的实现,却传递参数和值的字典,其中参数是连接字符串(调用者知道使用数据库需要连接字符串)
我应该选择哪个选项,我在这里正确使用工厂模式? 感谢帮助!
答案 0 :(得分:1)
责任在于包含GetStorageClass的类。它是使用提供给它的构造函数的连接字符串值构造的,或者它有一个私有方法从另一个源读取值。
除了StorageType之外,传入一个键值存储将会过于暧昧,API的使用者只想获得一个IStore实例,而不是配置它。
如果您需要为特定的IStore实现进行配置,您可能希望为该实现实现Builder模式并将构建器注入工厂。