.NET 8.0 - 使用存储库模式和 Dapper 进行日志记录和单元测试的清洁架构
.NET 8.0 - 使用存储库模式和 Dapper 进行日志记录和单元测试的清洁架构
在本文中,我们将了解清洁架构并引导您了解 .NET 8.0 中的示例 CRUD API。
我们将在此示例中使用以下工具、技术和框架:
在开始示例应用程序之前,让我们了解清晰的架构及其好处。
软件架构的目标是尽量减少构建和维护所需系统所需的人力资源。——罗伯特·C·马丁,《清洁架构》
清洁架构解释:
清洁架构 (Clean Architecture) 是由罗伯特·C·马丁 (Robert C. Martin)(又名鲍勃大叔) 提出的系统架构指南 。它衍生自许多架构指南,例如六边形架构、洋葱架构等。
清洁架构的主要概念是应用程序的核心逻辑很少改变,因此它将是独立的并被视为核心。
使这种架构发挥作用的首要规则是依赖规则。该规则规定,源代码依赖关系只能指向内部,并且内圈中的任何事物都无法知晓外圈中的任何事物。
通过将软件分层并遵循依赖规则,您将创建一个本质上可测试的系统,并享受其带来的所有好处。当系统的任何外部组件(例如数据库或 Web 框架)过时时,您可以轻松替换这些过时的元素。
在清晰架构中,领域层和应用层仍然处于设计的中心,被称为应用程序的核心。
领域层包含企业逻辑,应用层包含业务逻辑。
企业逻辑可以在许多相关系统之间共享,但业务逻辑不可共享,因为它是为特定的业务需求而设计的。
如果您没有企业而只是编写单个应用程序,那么这些实体就是该应用程序的业务对象。
清洁架构的优点:
框架独立——该架构不依赖于某些功能丰富的软件库。这使得您可以将这些框架用作工具。
UI 独立 - 它与 UI 层松散耦合。因此,您可以在不改变核心业务的情况下更改 UI。
独立于数据库 - 您可以将 SQL Server 或 Oracle 替换为 MongoDB、Bigtable、CouchDB 或其他数据库。您的业务规则不受数据库的约束。
高度可维护——遵循关注点分离。
高度可测试 - 使用这种方法构建的应用程序,尤其是核心域模型及其业务规则,极易测试。
现在我们已经了解了简洁架构。在开始示例 API 之前,让我们简单回顾一下 Dapper。
Dapper 解释道:
Dapper 是一个简单的对象映射器或微型 ORM,负责数据库和编程语言之间的映射。
Dapper 由 Stack Overflow 团队创建,旨在解决他们的问题并将其开源。Dapper 在 Stack Overflow 上的使用本身就展现了它的强大功能。
它大大减少了数据库访问代码,并专注于完成数据库任务,而不是完全依赖 ORM。
它可以与任何数据库集成,例如 SQL Server、Oracle、SQLite、MySQL、PostgreSQL 等。
如果DB已经设计好了,那么使用Dapper是一个最佳且高效的选择。
性能:与 Entity Framework 相比,Dapper 的数据查询速度更快。这是因为 Dapper 直接使用 RAW SQL,因此时间延迟相对较小。
在本文中,我们将与 Dapper 一起使用存储库模式和工作单元,并向您展示如何按照存储库模式和工作单元在 ASP.NET 8.0 API 中使用 Dapper。
解决方案和项目设置:
首先,创建一个用于执行 CRUD 操作的新表。您可以使用 CleanArch.Sql/Scripts代码示例文件夹下共享的脚本。
一旦我们的后端准备就绪,打开 Visual Studio 2022 并创建一个空白解决方案项目,并将其命名为 CleanArch。
设置核心层: 在解决方案下,创建一个新的类库项目,并将其命名为 CleanArch.Core。
• 添加一个新文件夹 Entities并添加一个名为 的新实体类 Contact。
这里需要注意的是,核心层不应该依赖于任何其他项目或层。这在使用清洁架构时非常重要。
设置应用层: 添加另一个类库项目并将其命名为 CleanArch.Application。
添加一个新文件夹 Application,在此文件夹下,我们将定义将在另一层实现的接口。
创建一个通用 IRepository接口并定义 CRUD 方法。
添加对项目的引用 Core,应用程序项目始终仅依赖于该 Core项目。
之后添加一个联系人特定存储库( IContactRepository),并从中继承 IRepository
另外,创建一个新的接口并命名它, IUnitOfWork因为我们将在实现中使用工作单元。
由于我们也在实现日志记录,因此添加一个 ILogger接口并添加不同日志级别的方法。
设置日志记录: 添加新的类库项目( CleanArch.Logging)
我们将使用 Log4Net 库进行日志记录,因此 log4net从 NuGet 包管理器安装包。
添加对项目的引用 Application,然后添加新类 Logger并实现 ILogger接口。
设置 SQL 项目: 添加一个新的类库项目 ( CleanArch.Sql)。我们将使用此项目来管理 Dapper 查询。
添加一个新文件夹 Queries并在其下添加一个新类 ContactQueries(以管理对象的简洁查询 Contact)。
除此之外, Scripts还添加了包含示例中使用的表的先决条件脚本的文件夹。
设置基础设施层: 由于我们的基础代码已经准备好,现在添加一个新的类库项目并将其命名为 CleanArch.Infrastructure。
Install-Package Dapper
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.DependencyInjection.Abstractions
Install-Package System.Data.SqlClient
Enter fullscreen mode
Exit fullscreen mode
添加对项目的引用( Application、、 Core和 Sql),并添加一个新文件夹 Repository。
之后 IContactRepository,让我们通过创建一个新类 ContactRepository并注入来 IConfiguration获取连接字符串来实现接口 appsettings.json
另外, IUnitOfWork通过创建新类来实现接口 UnitOfWork
最后,将接口及其实现注册到 .NET Core 服务容器。添加一个新的静态类 ServiceCollectionExtension,并通过注入的方式在其下添加 RegisterServices 方法 IServiceCollection。
稍后,我们将在 API 的ConfigureService 方法下注册它。
设置 API 项目: 添加一个新的 .NET 8.0 Web API 项目并将其命名为 CleanArch.Api。
添加对项目的引用( Application、 Infrastructure和 Logging),并添加 Swashbuckle.AspNetCore包。
设置 appsettings.json文件来管理 API 设置并替换 ConnectionStrings部分下的 DB 连接字符串。
添加 log4net.config 并在其下添加与日志相关的设置。确保将其 Copy to Output Directory属性设置为 Copy Always。
配置启动设置,例如 RegisterServices(在 CleanArch.Infrastructure项目下定义)、配置 log4net 以及添加 Swagger UI(带有身份验证方案)。
删除默认的控制器/模型类并在模型下添加一个新类( ApiResponse),以管理 API 响应的通用响应格式。
添加一个新的控制器并将其命名为 AuthController,以实现未授权的实现,因为我们将使用基于密钥的身份验证。
添加 AuthorizationFilter,如下所示,以管理基于 API 密钥的身份验证。
这允许基于主密钥和辅助密钥进行身份验证。
我们可以添加多个辅助键,并且可以打开或关闭它们的使用 appsettings。
这将有助于保证我们的主密钥安全,并根据需要将辅助密钥分发给不同的客户端。
添加一个新的控制器并将其命名为 BaseApiController,该控制器将包含通用实现并将作为所有其他 API 控制器的基础控制器。
最后,通过注入对象类型 IUnitOfWork并添加所有 CRUD 操作来添加一个新的 API 控制器来公开联系人 API。
设置测试项目: 添加一个新的 MSTest 测试项目并命名它 CleanArch.Test并添加以下包。
Install-Package Microsoft.Extensions.Configuration
Install-Package MSTest.TestFramework
Install-Package MSTest.TestAdapter
Install-Package Moq
Enter fullscreen mode
Exit fullscreen mode
构建并运行测试用例:
构建解决方案并运行代码覆盖率,这将运行所有测试用例并向您显示测试代码覆盖率。
运行并测试 API:
运行项目并测试所有 CRUD API 方法。(确保 CleanArch.Api将其设置为启动项目)
Swagger 用户界面
未经身份验证运行 API 会引发错误。
添加 API 授权。
POST—— 添加新记录。
GET—— 获取所有记录。
PUT—— 更新现有记录。
GET—— 获取单条记录。
删除 ——删除现有记录。
笔记:
如果您有任何意见或建议,请在下面的评论部分中留言。
在这里检查源代码。
使用 Clean Architecture 的 .NET 8.0 API
.NET 8.0 - 使用存储库模式和 Dapper 进行日志记录和单元测试的清洁架构
介绍
本文介绍了如何在 .NET 8.0 中使用清晰架构 (Clean Architecture) 创建示例 CRUD API。 点击此处阅读完整文档
我们将在此示例中使用以下工具、技术和框架:
Visual Studio 2022 和 .NET 8.0
C#
MS SQL 数据库
清洁架构
整洁架构 (Clean Architecture) 是由罗伯特·C·马丁 (Robert C. Martin)(又名鲍勃大叔)提出的系统架构指南。它衍生自许多架构指南,例如六边形架构、洋葱架构等。
Dapper(迷你 ORM)
Dapper 是一个简单的对象映射器或微型 ORM,负责数据库和编程语言之间的映射。
存储库模式
工作单元
Swagger 用户界面
API 身份验证(基于密钥)
日志记录(使用 log4net)
单元测试(MSTest 项目)
数据库设置:
创建一个用于执行 CRUD 操作的新表。您可以……
文章来源:https://dev.to/techiesdiary/net-60-clean-architecture-using-repository-pattern-and-dapper-with-logging-and-unit-testing-1nd9