dotnet core 对业务是怎么实现的。

2022-06-27

单元测试

业务测试

https://github.dev/dotnet/aspnetcore/blob/de3019b7dab5b5995942db1fbec6aa466c4af34c/src/Identity/EntityFrameworkCore/test

用内存数据库作为依赖模拟。

Identity/Core 库

https://github.dev/dotnet/aspnetcore/blob/c85baf8db0c72ae8e68643029d514b2e737c9fae/src/Identity/Core/src/IdentityServiceCollectionExtensions.cs#L80

UserManager 的实现

https://github.dev/dotnet/aspnetcore/blob/05b2afb73b55b11d8cb3691dedfebba1f0285332/src/Identity/Extensions.Core/src/UserManager.cs#L24

参数使用: 依赖注入

FindGenericBaseType 可以获取泛型的参数,再做处理。

UserManager 的测试

https://github.dev/dotnet/aspnetcore/blob/de3019b7dab5b5995942db1fbec6aa466c4af34c/src/Identity/test/Identity.Test/UserManagerTest.cs#L1

依赖项都在单元测试里自行构建

书写原则符合 Setup、Act、Assert

context 是怎么组织的呢?

主要通过继承操作,将上游的 DB 定义传给项目里的 DbContext

IdentityDbContext 继承 IdentityUserContext。

EntityFrameworkCore 文件夹

src/Identity/EntityFrameworkCore/src/IdentityDbContext.cs 负责了用户角色业务上下文的数据库包含那些表、字段定义的内容

src/Identity/EntityFrameworkCore/src/IdentityEntityFrameworkBuilderExtensions.cs 这里完成了 User 业务相关的服务的依赖注入,而 UserManager 的用法是依赖注入 (之前实现业务为什么尽量少用依赖注入呢?因为有多依赖的时候不好处理?启动时加入依赖注入的时候失败?所以把逻辑加入到了控制器里。)

src/Identity/EntityFrameworkCore/src/IdentityUserContext.cs 是用户授权数据库的定义,跟 IdentityDbContext 很相似,但 IdentityUserContext 在 OnModelCreating 的定义更多一些。

src/Identity/EntityFrameworkCore/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj 分包定义 作为小包使用

src/Identity/EntityFrameworkCore/src/Resources.resx 资源定义

真实的业务封装

https://github.dev/dotnet/aspnetcore/blob/05b2afb73b55b11d8cb3691dedfebba1f0285332/src/Identity/EntityFrameworkCore/src/RoleStore.cs#L72 对用户角色的业务封装

src/Identity/EntityFrameworkCore/src/UserOnlyStore.cs

https://github.dev/dotnet/aspnetcore/blob/05b2afb73b55b11d8cb3691dedfebba1f0285332/src/Identity/EntityFrameworkCore/src/UserStore.cs

prisma 的定义用于 C#

https://dev.to/prisma/database-migrations-for-net-and-entity-framework-with-prisma-49e0

const 和 static 的区别是什么
copyright ©2019-2024 shenzhen
粤ICP备20041170号-1