改变构造函数行为的最不好的方法

car*_*ett 5 c# massive

我觉得我在这里遇到了几个不好的解决方案,需要一些关于如何最大限度地减少未来痛苦的建议.我们正在使用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;
Run Code Online (Sandbox Code Playgroud)

对我来说,重要的部分是它从中读取连接字符串ConfigurationManager.我们正在尝试集中配置,在这样做时,我们希望将连接字符串保留在我们的web/app.configs之外(我们有大约150个已部署的主机,因此开销变得很大).但是,由于配置文件读取在这里是硬编码的,因此这个ConnectionStrings集合是只读的(有解决方法,但它们都非常脏).

一种可能的方法是将这些行提取到虚方法中,然后使用继承更改它.当我们想要更新Massive时,这并不是那么好,并且从构造函数调用虚方法也可能很糟糕.

我还有其他什么选择?这里的主要优先事项是最小化更新时的影响.

car*_*ett 1

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