更改构造函数行为的最不坏方法



我觉得我被困在几个糟糕的解决方案之间,需要一些关于如何最大限度地减少未来痛苦的建议。我们正在使用Massive ORM,它在构造函数中有以下行:

var _providerName = "System.Data.SqlClient";
if (ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName != null)
_providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName;
_factory = DbProviderFactories.GetFactory(_providerName);
ConnectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;

这里对我来说重要的部分是它从ConfigurationManager中读取连接字符串。我们正在尝试集中配置,在这样做的过程中,我们希望将连接字符串排除在web/app.config之外(我们部署了大约150个主机,因此开销越来越大)。但是,由于此处读取的配置文件是硬编码的,并且ConnectionStrings集合是只读的(有一些解决方法,但它们都很脏),所以这种情况会崩溃。

一种可能的解决方法是将这些行提取到一个虚拟方法中,然后通过继承对其进行更改。不过,当我们想要更新Massive时,这就不太好了,而且从构造函数调用虚拟方法也可能很糟糕。

我还有什么其他选择?这里的首要任务是在更新时尽量减少影响。

您可以通过构造函数传入所有必需的字段来消除对象的配置源依赖关系。

请参阅Martin Fowler关于依赖注入的文章。同样的概念也适用于此。

最后,我们决定对这个巨大的类进行最小的更改,使其成为部分类。然后在一个单独的文件中,我们添加了一个接受不同参数的附加构造函数。这样,如果我们更新库,唯一需要做的更改就是再次添加partial

最新更新