0

我正在使用 MVC 3,但在使用实体框架时遇到了问题,所以我试图了解实现我自己的 DAL 的最佳方法是什么。我在我的系统中管理几个主要实体:用户、部门、日历等...我试图了解使用这种分层架构的最佳实践。

  1. DAL 应该实现只返回 DataTables 或 DataSets 的方法,还是应该熟悉模型\业务对象(用户、部门日历等)?

  2. 它应该包含代表不同模型\业务对象的类吗?

  3. 我应该将不同的存储库类放在哪里,它们也是 DAL 的一部分吗?

4

1 回答 1

1

1) DAL 是否应该实现只返回 DataTables 或 DataSets 的方法

绝对不。DataTables 和 DataSets 是过去的产物。DAL 方法应获取/返回您的 DAL 实体。例如,如果您使用的是实体框架,那么这些将是 EF 为您创建的自动生成的类。或者,如果您使用的是 EF Code First,这些类将是您编写的映射到 SQL 表的类

2)它是否应该包含代表不同模型\业务对象的类?

如 1) 中所述,DAL 层应包含映射到 SQL 表的实体以及存储库接口的实现。存储库接口定义了这些实体的操作。在 DAL 层内,您将为实体框架实现此接口(如果这是您打算使用的)。在这些方法中,您将使用 DataContext 对您的实体执行不同的操作。

3)我应该将不同的存储库类放在哪里,它们也是 DAL 的一部分吗?

您应该将它们放在与数据访问类相同的程序集中。

然后,ASP.NET MVC 应用程序将使用 DAL 层。您的控制器将简单地将存储库接口作为构造函数参数,并在您将在其上调用各种方法的操作中。然后,您将配置您选择的依赖注入框架,以将此存储库接口的特定实现注入控制器。此实现将是特定于实体框架的实现。

但无论您做什么,都不要忘记在 ASp.NET MVC 应用程序本身内定义视图模型。这些可以放在 Models 文件夹中。视图模型是将传递给视图的类。典型的控制器操作将使用存储库获取一个或多个域实体,将这些实体映射到您为特定视图定义的单个视图模型,最后将视图模型传递给视图。当然,这反过来也可以:控制器操作将视图模型作为视图的操作参数,将此视图模型映射到一个或多个域实体,并从存​​储库调用一个或多个方法,将这些域实体传递给它们。

于 2012-12-26T09:01:47.813 回答