我正在使用MVC 3而我在使用Entity Framework时遇到了麻烦,因此我试图了解实现自己的DAL的最佳方法。 我管理系统中的几个主要实体:用户,部门,日历等...... 我正在尝试使用这种分层架构来理解最佳实践。
DAL应该实现只返回DataTables或DataSet的方法,还是应该熟悉model \ business对象(User,Department Calendar等)?
它是否应该包含代表不同models \ business对象的类?
我应该在哪里放置不同的存储库类,它们也是DAL的一部分?
答案 0 :(得分:1)
1)DAL应该实现仅返回DataTables或DataSet的方法
绝对不是。 DataTables和DataSet是过去的工件。 DAL方法应该接收/返回您的DAL实体。例如,如果您使用的是实体框架,则这些是EF为您创建的自动生成的类。或者,如果您使用的是EF Code First,那么您编写的类将映射到SQL表
2)它应该包含代表不同models \ business对象的类吗?
如1)中所述,DAL层应包含映射到SQL表的实体以及存储库接口的实现。存储库接口定义了这些实体的操作。在DAL层内,您将为Entity Framework实现此接口(如果这是您打算使用的)。在方法内部,您将使用DataContext对您的实体执行不同的操作。
3)我应该在哪里放置不同的存储库类,它们也是DAL的一部分?
您应该将它们放在与数据访问类相同的程序集中。
ASP.NET MVC应用程序将使用DAL层。您的控制器将简单地将存储库接口作为构造函数参数,并在操作内部调用其上的各种方法。然后,您将配置所选的依赖注入框架,以将此存储库接口的特定实现注入控制器。该实现将是实体框架特有的实现。
但无论你做什么,都不要忘记在ASp.NET MVC应用程序本身内部定义视图模型。这些可以放在Models文件夹中。视图模型是您将传递给视图的类。典型的控制器操作将使用存储库来获取一个或多个域实体,将这些实体映射到您为特定视图定义的单个视图模型,最后将视图模型传递给视图。当然,这反过来也是如此:控制器操作将视图模型作为视图中的操作参数,将此视图模型映射到一个或多个域实体,并从存储库调用一个或多个方法将这些域实体传递给它们。 / p>