.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