asp.net - 如何在 ASP.NET 中组织数据访问层 (DAL)

标签 asp.net data-access-layer code-organization

我有一个用 C# 开发的 ASP.NET Web 窗体应用程序。

我想通过将 DAL 任务与背后的代码分开来构建我的应用程序。

我在 App_Code 中创建了一个类,DBUtilities,它负责与数据库的通信,以免整个应用程序中出现重复的代码。该类具有获取数据表、标量值等的方法...并且它们接受作为参数的连接字符串名称查询命令作为字符串。

问题是我的代码中仍然保留了所有查询命令。其中许多在页面上重复,这会导致维护问题。

我想知道创建一个包含许多字符串属性的(静态)类QueryRepository并将其与每个属性关联到一个特定的查询命令是否是一个好习惯。每次我想要执行查询命令 MyCommand 时,我都会将字符串的 QueryRepository.MyCommand 属性传递给 DBUtilities 类。更重要的是,如果我需要更改查询命令,我只需在 QueryRepository 类上执行即可。

这是组织我的 DAL 的好方法吗?

最佳答案

对于实现模型- View -呈现器 (MVP) 模式的 ASP.NET Web 表单来说,是将逻辑和数据库查询与背后的 UI 代码分开的一种好方法。您必须编写一个 Presenter 类,该类具有对 View 接口(interface)的通用引用,并且其中有一个模型,该模型具有数据库查询、逻辑等。演示器将在其所有函数中调用通用 View 接口(interface)的函数。然后您可以编写实际的 ASP.net View 。在 View 中,您实例化并引用此演示者,在实例化演示者时,您将 self 对象(即 ASP View 本身(使用“this”关键字))注入(inject)演示者。您可以根据需要为演示者类设计适当的继承,以便它们可以重用并且可以进行单元测试。

响应 CiccioMiami 的查询添加:

这里有几个启动链接

http://www.codeproject.com/KB/aspnet/AspNet_MVP.aspx

http://wiki.asp.net/page.aspx/340/mvp-pattern/

MVC 和 MVP 模式的区别解释如下:http://www.codeproject.com/KB/architecture/DotNetMVPFramework_Part1.aspx

除此之外,对于 ASP.net Web 表单体系结构,请求与页面生命周期紧密耦合。您有一系列页面生命周期事件,开发人员在每个事件中编写代码。因此,业务逻辑与 UI View 紧密耦合。在一段时间内,这对于代码可维护性和单元测试来说并不是一个好的情况。 ASP.net Web 表单中的单元测试很困难,因为很难模拟请求和页面生命周期事件。在 MVC 中,请求首先到达 Controller 。 Controller 将模型用于业务逻辑并将模型传递给 View 。 View 使用模型数据进行渲染,并作为对用户的响应返回。 Controller 对工作流程有更好的控制。您可以测试模型、DTO 传输等,就像在独立应用程序中一样。对于 Web 表单,没有 Controller ,请求直接到达 ASP.net 页面,该页面是一个 View 。用户无能为力。好在微软意识到了这个问题,我们有了 ASP.net MVC。 ASP.net Webforms 的 MVP 模式将在一定程度上解决代码分离问题。最好的选择是使用 ASP.net MVC,如果没有,那么您可以将 MVP 与 Webforms 一起使用。

关于asp.net - 如何在 ASP.NET 中组织数据访问层 (DAL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256138/

相关文章:

wpf - 在哪里放置 MVVM CustomControl ViewModels/类 WPF

c# - 当单个部分需要多个对象时,如何从 View 中动态地将项目添加到我的集合中?

.net - 是否有OR映射器提供异步方法?

database - 调用依赖于数据访问层的方法的单元测试方法

java - 'mix class and interfaces in the same package' 是不好的做法吗?

php - 如何组织考勤系统代码(动态表单使用$_POST而不是$_GET)?

javascript - 在 asp.net 中隐藏更新面板中的 div

asp.net - 数据列表中的行分隔符

jquery - 如何显示基于 Html.DropDownList 的 div?

.net - 关于用 Entity Framework 替换企业库数据访问 block 的建议