ASP.NET MVC 三层架构入门 Web 应用 - 第二部分






4.76/5 (25投票s)
ASP.NET MVC 三层架构入门 Web 应用
引言
本文是第一部分的延续。在第一篇文章中,我们了解了需求,然后将其分解为对象,找出它们之间的关系,最后设计并实现了数据库。现在,让我们看看如何创建一个解决方案,然后向其中添加多个项目,并向相应的项目添加所需的引用。
2:分析与设计(创建解决方案和项目)
在 Visual Studio 中创建一个新项目,命名为 LinkHubUI
,选择所需路径,然后单击“确定”。
选择“空项目”,勾选“MVC”复选框,然后单击“确定”。
现在,我们将添加一些任务列表,以便轻松实现项目。我们将添加一个文本文件,右键单击项目,选择“添加”->“新建项”,并将其命名为 ToDoList.txt。
这个 ToDoList
包含我们需要执行的任务列表。
这是一个逐步实现 MVC 中分层架构的过程。我为此付出了很多努力来为您提供这些步骤。因此,我相信当您第一次实现项目时,这将非常有帮助。
现在,我们的第一个任务是创建包含所有项目的解决方案。
右键单击解决方案,然后选择“添加”->“新项目”。在“C#”->“类库”中选择,并将其命名为 BOL(业务对象层)。
从 BOL 项目中删除 Class1.cs 文件。
添加另一个类库项目,命名为 BLL(业务逻辑层),并删除 BLL 项目中的 Class1.cs 文件。
最后,添加一个全新的类库项目,命名为 DAL(数据访问层),并删除 DAL 中的 Class1.cs 文件。
我们的项目架构
现在,如果我们查看我们的架构,您可以看到 UI 正在与 BLL 和 BOL 交互。
因此,我需要在 UI 中添加 BLL.dll 和 BOL.dll。
BLL 与 BOL 和 DAL 交互。将 BOL.dll 和 DAL.dll 引用添加到 BLL。
DAL 与 BOL 交互。将 BOL.dll 引用添加到 DAL。
如果我尝试为 DAL 添加 BLL.dll 的引用,将会出错(循环依赖)。
因此,我们应该根据我们的架构从左到右添加引用(从左层开始,查看它与右边的层交互,并添加 DLL 以及顶部的通用对象层)。保存所有文件并重新生成解决方案。
现在,我们已经完成了所有项目和 DLL 的设置。我们在 ToDoList
中的第一步已经完成。在下一篇文章中,我们将使用 Entity Framework 创建 BOL。
3:实现所有层
创建业务对象层(BOL)
BOL 实际上是什么,我们如何创建业务对象?实际上,BOL 几乎就是您数据库表中类的副本。因此,对于数据库中的一个表,我们需要在我们的 BOL 中有一个类,或者为每个表有一个等效的类。
如我们所知,表只不过是关系,类的实例是一个对象。因此,对象关系映射(ORM 或 OR Mapping)在 BOL 中完成。现在,让我们以 tbl_Department
表(关系)为例,该表具有 Did
(部门 ID)、DName
(部门名称)和 Description 列。
因此,我将创建一个等效于 tbl_Department
的类,其属性为 Did
(类型为 int
)、DName
和 Description
(类型为 string
)。因此,我们可以说它们之间存在关系
、对象
和映射
。我可以称之为 OR 映射。
以前,我们习惯于编写这些类。但是,借助 Entity Framework,我们将自动生成这些类。下面的幻灯片是针对单个表的。那么具有一对多关系的表呢?
现在,假设我们有 tbl_Department
和 tbl_Employee
表,并且一个 Department
可以包含 n 个员工,如果我有如下所示的关系。我们如何将它们实现为类?
很简单,我们将创建一个 tbl_Department
类。我们知道,department
包含 n 个员工。因此,我们将 tbl_Employee
的列表作为 tbl_Department
类中的属性。而 tbl_Employee
是 tbl_Employee
表的另一个类。而且我们还知道,每个 Employee
都属于特定的部门。因此,tbl_Employee
类包含一个额外的属性,即 tbl_Department
的对象。
因此,对于一对多关系,下面的类结构是这样的。最后,多对多关系呢?
我们知道最后的关系是多对多。
让我们以 Student
和 Course
为例。一个 student
可以选择 n 门课程,而一门课程可以被 n 个学生选择。在这种情况下,我们需要一个额外的类来显示 tbl_Student
和 tbl_Course
之间的多对多关系,即 tbl_Student_Course
。现在您可以看到,一个 student
选择了一门 course
,由 tbl_Student_Course
类中的 Sid
和 Cid
来描述。
我们还在 tbl_Student_Course
类中映射 tbl_student
和 tbl_Course
。一个学生可以选择 n 门课程。因此,tbl_Student
类包含 tbl_Student_Course
的列表。而一门课程可以被 n 个 student
s 选择。因此,tbl_Course
类包含 tbl_Student_Course
的列表。
这对于多对多关系来说有点逻辑。总之,我们不必担心编写所有这些代码,因为我们的 Entity Framework 将自动生成这些类。
现在让我们实现 BOL。右键单击 BOL,选择“添加新项”->“ADO.NET 实体数据模型”,并将其命名为 LinkHubModel.edmx,然后单击“添加”。
选择“从数据库生成模型”,然后单击“下一步”。
单击“新建连接”。设置您的连接,选择数据库,然后单击“下一步”。
选择“Entity Framework 6”,然后单击“下一步”。
现在选择所有表,您可以看到模型命名空间是 LinkHubDbModel
-> 单击“完成”。
您可能会看到此安全警告两次。单击“确定”。
现在,您可以看到它为每个表生成的类。
对于 tbl_Category
,它生成了 CategoryId
、CategoryName
和 CategoryDesc
属性。
正如我们所知,一个类别包含 URL 列表,我得到了 tbl_Url
的列表。
namespace BOL
{
using System;
using System.Collections.Generic;
public partial class tbl_Category
{
public tbl_Category()
{
this.tbl_Url = new HashSet<tbl_Url>();
}
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public string CategoryDesc { get; set; }
public virtual ICollection<tbl_Url> tbl_Url { get; set; }
}
}
对于 tbl_Users
,已生成 UserId
、UserEmail
、Password
和 Role
属性。
一个用户可以上传 n 个 URL。同样,我有一个 URL 列表。
namespace BOL
{
using System;
using System.Collections.Generic;
public partial class tbl_User
{
public tbl_User()
{
this.tbl_Url = new HashSet<tbl_Url>();
}
public int UserId { get; set; }
public string UserEmail { get; set; }
public string Password { get; set; }
public string Role { get; set; }
public virtual ICollection<tbl_Url> tbl_Url { get; set; }
}
}
它遵循我们之前学到的相同逻辑,让我们看看 Url 类。tbl_Url
类具有 UrlId
、UrlTitle
、Url
、UrlDesc
等属性。正如我们所知,每个 URL 都属于一个特定的类别,并且由特定的用户上传。因此,它遵循相同的规则。
namespace BOL
{
using System;
using System.Collections.Generic;
public partial class tbl_Url
{
public int UrlId { get; set; }
public string UrlTitle { get; set; }
public string Url { get; set; }
public string UrlDesc { get; set; }
public Nullable<int> CategoryId { get; set; }
public Nullable<int> UserId { get; set; }
public string IsApproved { get; set; }
public virtual tbl_Category tbl_Category { get; set; }
public virtual tbl_User tbl_User { get; set; }
}
}
我们将得到这 3 个类。它们是我们的业务对象。现在我将重新生成 BOL 项目。正如我们所知,我们将 UI(用户界面)中使用这些业务对象。我需要在 UI 中获得连接字符串,该连接字符串在 BOL 项目的 App.config 文件中。复制 connectionStrings
部分并将其粘贴到 UI 的 web.config 中(我们将在下一篇文章中介绍这一点),然后重新生成解决方案。这是一个非常重要的步骤,因为我的 UI 将与 BOL 交互,而我们是通过 Entity Framework 生成的 BOL。
如果我们查看 TODO 列表,我们已经完成了创建 BOL 和在 UI 中添加连接字符串。
感谢阅读。