jk's notes
  • 项目结构

项目结构

搭建应用程序结构是一个重要的部分. 在本章中, 我会展示如何使用分层架构来对应用进行分离的细节. 这会使用你的应用程序更容易维护与扩展.

核心项目

核心项目是公共代码所在的地方, 公共代码会被整个应用程序所共享访问. 也是存放 Entity Framework 所需的实体类的地方. 这里还会存放公共接口, 以及辅助用的代码.

首先, 打开第1章所创建的解决方案. 然后添加一个新的 .NET 标准的 C# 类库项目, 并命名为 "EFCore5WebApp.Core", 将其添加到解决方案中. 如图所示.

image-20220720101444140

下一屏中, 命名项目为 "EFCore5WebApp.Core", 如图所示:

image-20220720101602201

下一步, 创建一个新的 NUnit 测试项目 (.NET Core), 并命名为 "EFCore5WebApp.Core.Tests". 该项目会存储我们对共享代码的单元测试. 你可以很容易的找到正确的模板, 只需要在模板对话框中搜索 NUnit, 如图所示:

image-20220720101945224

在添加 Core.Tests 项目后, 添加 Core 项目的引用到它上面.

即让 Core.Tests 引用 Core.

单元测试简介

NUnit 是很常用的测试框架. 单元测试已经变得越来越受欢迎, 随着测试驱动开发 (Test-Driven Development, TDD) 的发展. 它意味着, 首先第一步你先创建单元测试, 然后在编写代码, 使得测试通过. 本书后续中, 我们会对 Entity Framework Core 5 的代码进行测试, 正确后才会集成到我们的 web 项目中.

一个单元测试会测试一小段代码, 通常是一个方法. 你需要测试一些潜在的边界情况, 来确保你的代码是可靠的, 然后将其集成到最终的解决方案中.

数据访问层项目

下一步, 我们创建数据访问层项目 (Data Access Layer), 或简称为 DAL 项目. 新建一个 .NET Core C# 类库, 如图所示, 并命名为 "EFCore5WebApp.DAL".

image-20220720103322445

然后, 将 Core 项目的引用添加到 DAL 项目中 (即, 让 DAL 引用 Core). 然后, 添加一个 NUnit 测试项目到解决方案中, 命名为 "EFCore5WebApp.DAL.Tests". 并将 DAL 项目与 Core 项目的引用添加到 DAL.Tests 项目中 (即, 让 DAL.Tests 引用 DAL 和 Core 项目). 这样, 就添加了 Core 项目的引用到 DAL 和 DAL.Tests 项目上了. DAL.Tests 项目会包含我们所有 Entity Framework Core 5 的代码测试, 并在通过后将其纳入 web 项目.

下一步, 我们会将 EF Core 5 NuGet 包移入 DAL 项目中. 右键解决方案节点, 并点击管理解决方案的 NuGet 程序包. 然后选择 Microsoft.EntityFrameworkCore.SqlServer 项目, 并选择 DAL 和 DAL.Tests 项目, 后点击安装按钮. 如图所示:

image-20220720104942668

主项目引用

最后, 我们需要添加项目引用到名为 "EFCore5WebApp" 的 ASP.NET Core MVC 应用程序项目中. 添加 Core 和 DAL 项目的引用到根项目 "EFCore5WebApp" 上 (即, 让根项目引用 DAL 和 Core). 这样就可以确保我们可以使用到服务, 并且以 ASP.NET Core web 应用作为入口.

最终项目结构引用关系为:

image-20220720105534566

小结

本章中, 我们成功的创建了多层项目结构. Core 项目包含我们的实体, 它会被 DAL 项目中的 Entity Framework 所使用. DAL 项目则是 Entity Framework Core 5 代码所在的位置. 我们的 web 项目会使用 Core 和 DAL 项目. 现在, 你的项目结构应该看起来像图中一样.

image-20220720105844242

将项目按照任务功能来分割, 项目会变得更加容易维护和扩展. 我们还在项目中添加了单元测试. 这会节省开发时间, 使得改变变得简单安全. 在应用发生变化时不用担心出现的新的 Bug, 新功能在开发中也可以进行回归测试.

在下一章中, 我们会介绍如何创建实体类, Entity Framework Core 5 会在后面第4章中使用实体类. 实体类会被 Entity Framework Core 5 用于映射到数据库中的表.

Last Updated:
Contributors: jk