【问题标题】:Reusable Components, database connections and different environments可重用组件、数据库连接和不同环境
【发布时间】:2009-04-21 09:24:55
【问题描述】:

我想知道在 .net 中设置可重用组件/库时什么是最佳实践。我有一个 web 服务,它利用一个包含一些数据库连接的库来与数据库交互。我想知道在指定连接字符串时应该如何设置我的库。

在部署到 dev/uat/prod 环境时,我需要能够更改可重用组件连接到的数据库。此外,一定需要能够跟踪谁在进行数据库调用——我可能想看看谁是可重用组件的用户,所以如果 web 服务 A 和 B 都在使用它,我可能希望 ws_A_usr 在连接字符串,对于 B 也是如此。

我看到了一些可以做到这一点的方法,但我正在重构一些遗留的所有三个实现。

我应该从 config (MyLib.Properties.Settings.Default.abcConnectionString) 中读取连接字符串

我应该在我的 api 中接受连接字符串作为参数吗?

我应该接受 IDbConnection 作为我的 api 中的参数吗?

还有其他更合适的方法吗?最好的方法是什么?

【问题讨论】:

    标签: .net configuration connection-string


    【解决方案1】:

    我会说图书馆应该独立于它的用户(在这种情况下是网络服务)。在这方面,对配置文件的依赖并不是那么好。

    您确实需要 web 服务的 web.config 中的连接字符串,但您希望在某个时候通过参数将其传递给库。这将允许您在非 Web 项目中使用相同的库。此外,它还允许您实现不同的方式来获取连接字符串(可能来自 web 服务调用)。

    HTH。 乔纳森

    【讨论】:

    • @Jonathan:连接字符串可能在 web.config 或 app.config 中:代码不会知道区别。
    • 没错,但不是重点。关键是要有一个可重用的库。在这方面,如果您希望能够传递来自用户输入的连接字符串,如果您有参数,则可以这样做。
    【解决方案2】:

    在我看来,这取决于连接与组件的绑定程度。如果连接到仅由组件使用的数据库,则强制组件的用户了解有关这些连接的任何信息是没有意义的。在这种情况下,将连接字符串保存在配置文件(app.config 或 web.config)中是可行的。事实上,将连接字符串保留在组件内部可能就足够了,但在配置文件中公开数据库服务器名称。

    如果组件使用与组件用户相同的数据库,则允许将连接作为组件的属性传入。如果没有设置属性,组件可以选择是否默认为内置连接字符串,或者如果没有设置属性,则抛出异常。


    如果您不介意将整个连接字符串暴露给消费者,则允许整个字符串存在于 app.config 或 web.config 中。特别是,使用 .NET 2.0 应用程序设置功能 (Properties\settings.settings)。这将导致默认值被编译到程序集中,但是当使用组件时,这些默认值将被写入 app.config 文件。它们可以从那里进行编辑。

    如果要限制可以更改的连接字符串的部分,则将这些部分编译到程序集中。公开您允许更改的部分的各个属性。特别是,公开数据库服务器名称、应用程序名称、用户名、密码等。这些属性将设置连接字符串的相应部分。如果您还不知道,请参阅SqlConnectionStringBuilder class

    【讨论】:

    • 这将如何在 dev/uat/prod 环境中工作。我无法将连接字符串编译到程序集中,因为主机名和用户名/密码因环境而异。此外,我希望组件的每个消费者都是可跟踪的,这意味着每个消费者都必须有不同的连接字符串?如果配置中缺少设置,我应该从组件中抛出 ConfigurationErrorsExceptions 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2019-10-10
    • 2019-07-24
    • 2020-01-03
    相关资源
    最近更新 更多