【问题标题】:Data Access Layer in ASP.Net: Where do I create the Connection?ASP.Net 中的数据访问层:我在哪里创建连接?
【发布时间】:2011-06-02 01:39:27
【问题描述】:

如果我想创建一个 3 层 ASP.Net 应用程序(表示层、业务层、数据访问层),哪里是创建连接对象的最佳位置?

到目前为止,我在表示层中使用了一个帮助程序类,从每个页面的 web.config 中的 ConnectionString 创建一个 IDbCommand,并将其传递给 DAL 类/方法。

现在我不太确定,这部分是否不应该也包含在 DAL 中,因为它显然是数据访问的一部分。 DAL 在一个单独编译的项目中,所以我无权访问 web.config 也无法访问连接字符串(对吗?)。

这里的最佳做法是什么?

【问题讨论】:

    标签: c# asp.net data-access-layer


    【解决方案1】:

    简答:

    表示对数据库的依赖关系的连接对象应该在(并且知道)数据访问层中创建。

    长答案:

    当您说“3-Tier”时,您的真正意思是“tier”还是“layer”?前者暗示了每层之间的硬边界,例如服务层。后者只是单个应用程序上下文中的逻辑分离。另外,以什么方式定义 DAL 是“单独编译的项目”?它可以访问运行代码的任何应用程序上下文的配置文件。如果它是它自己的层,它将具有某种服务或具有配置的东西。如果只是一个层,它可以访问应用程序的主配置。

    理想情况下,与数据库相关和/或依赖于数据库的任何内容都应仅存在于 DAL 中。应用程序域的其余部分不必担心数据库。

    【讨论】:

    • 我不想详述应用程序结构的细节,反正设计很糟糕。我的主要问题是:我应该从 DAL 访问 ConnectionString 吗?这不会对使用 DAL 的网站产生依赖关系吗?
    • @atticae:没有太多细节,是也不是。配置文件形式的依赖就是“为了使用这个库,你必须设置这些配置选项”。对于可以在多个环境和应用程序上下文中使用的库来说,这是非常标准的,并且是预期的。 DAL 可能具有硬编码的默认值,以便在没有配置值的情况下使用。但是,对于处理基础设施/环境依赖项的库来说,期望针对这些依赖项进行配置并不是不合理的。
    【解决方案2】:

    我认为它应该在服务层中,即满足用例的层。知道工作单元的对象应该是创建连接、设置事务级别、完成用例和清理任何必要内容的对象。

    它不应该在表示层中,因为如果您更改表示技术,您必须重新创建连接。

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2017-02-25
      • 2012-06-21
      • 2013-01-07
      相关资源
      最近更新 更多