65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (25投票s)

2014 年 11 月 25 日

CPOL

6分钟阅读

viewsIcon

63561

downloadIcon

26

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.dllBOL.dll

BLL 与 BOL 和 DAL 交互。将 BOL.dllDAL.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)、DNameDescription(类型为 string)。因此,我们可以说它们之间存在关系对象映射。我可以称之为 OR 映射。

以前,我们习惯于编写这些类。但是,借助 Entity Framework,我们将自动生成这些类。下面的幻灯片是针对单个表的。那么具有一对多关系的表呢?

现在,假设我们有 tbl_Departmenttbl_Employee 表,并且一个 Department 可以包含 n 个员工,如果我有如下所示的关系。我们如何将它们实现为类?

很简单,我们将创建一个 tbl_Department 类。我们知道,department 包含 n 个员工。因此,我们将 tbl_Employee 的列表作为 tbl_Department 类中的属性。而 tbl_Employeetbl_Employee 表的另一个类。而且我们还知道,每个 Employee 都属于特定的部门。因此,tbl_Employee 类包含一个额外的属性,即 tbl_Department 的对象。

因此,对于一对多关系,下面的类结构是这样的。最后,多对多关系呢?

我们知道最后的关系是多对多。

让我们以 StudentCourse 为例。一个 student 可以选择 n 门课程,而一门课程可以被 n 个学生选择。在这种情况下,我们需要一个额外的类来显示 tbl_Studenttbl_Course 之间的多对多关系,即 tbl_Student_Course。现在您可以看到,一个 student 选择了一门 course,由 tbl_Student_Course 类中的 SidCid 来描述。

我们还在 tbl_Student_Course 类中映射 tbl_studenttbl_Course。一个学生可以选择 n 门课程。因此,tbl_Student 类包含 tbl_Student_Course 的列表。而一门课程可以被 n 个 students 选择。因此,tbl_Course 类包含 tbl_Student_Course 的列表。

这对于多对多关系来说有点逻辑。总之,我们不必担心编写所有这些代码,因为我们的 Entity Framework 将自动生成这些类。

现在让我们实现 BOL。右键单击 BOL,选择“添加新项”->“ADO.NET 实体数据模型”,并将其命名为 LinkHubModel.edmx,然后单击“添加”。

选择“从数据库生成模型”,然后单击“下一步”。

单击“新建连接”。设置您的连接,选择数据库,然后单击“下一步”。

选择“Entity Framework 6”,然后单击“下一步”。

现在选择所有表,您可以看到模型命名空间是 LinkHubDbModel -> 单击“完成”。

您可能会看到此安全警告两次。单击“确定”。

现在,您可以看到它为每个表生成的类。

对于 tbl_Category,它生成了 CategoryIdCategoryNameCategoryDesc 属性。

正如我们所知,一个类别包含 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,已生成 UserIdUserEmailPasswordRole 属性。

一个用户可以上传 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 类具有 UrlIdUrlTitleUrlUrlDesc 等属性。正如我们所知,每个 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 中添加连接字符串。

感谢阅读。

© . All rights reserved.