5

我觉得我在这里陷入了几个糟糕的解决方案之间,需要一些关于如何尽量减少未来痛苦的建议。我们正在使用 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.configs 之外(我们有大约 150 个已部署的主机,因此开销变得很大)。但是,由于此处读取的配置文件是硬编码的,并且该ConnectionStrings集合是只读的(有一些变通方法,但它们都很脏),因此这会发生故障。

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

我还有什么其他选择?这里的主要优先事项是尽量减少更新时的影响。

4

2 回答 2

1

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

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

于 2012-10-20T16:23:25.427 回答
1

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

于 2013-03-20T06:49:34.980 回答