ABP VNext学习日记2
1.框架模块和应用程序模块
解析:
[1]框架模块:这些是框架的核心模块,比如缓存、邮件、主题、安全、序列化、验证、EF Core集成、MongoDB集成等。它们没有应用/业务功能,它们提供了日常开发经常用到的基础设施、集成和抽象。
[2]应用程序模块:这些模块实现了特定的应用/业务功能,像博客、文档管理、身份管理、租房管理等。它们通过有自己的实体、服务、API和UI组件。
2.固有的注册类型
解析:
[1]模块类注册为singleton。
[2]MVC控制器[继承Controller或AbpController]被注册为transient。
[3]MVC页面模型[继承PageModel或AbpPageModel]被注册为transient。
[4]MVC视图组件[继承ViewComponent或AbpViewComponent]被注册为transient。
[5]应用程序服务[实现IApplicationService接口或继承ApplicationService类]注册为transient。
[6]存储库[实现IRepository接口]注册为transient。
[7]域服务[实现IDomainService接口]注册为transient。
3.仓储
解析:
[1]仓储用来操作数据库进行数据存取。仓储接口在领域层定义,而仓储的实现类应该写在基础设施层。
[2]在ABP中,仓储类要实现IRepository接口,接口定义了常用的增删改查以及聚合方法,其中包括同步及异步方法。
4.FluentValidation Integration
解析:
[1]Volo.Abp.FluentValidation包将FluentValidation库集成到了验证系统,通过实现IObjectValidationContributor。
[2]安装方法:Install-Package Volo.Abp.FluentValidation
5.nameof表达式
解析:nameof表达式可生成变量、类型或成员的名称作为字符串常量。
var numbers = new List<int> { 1, 2, 3 };
Console.WriteLine(nameof(numbers)); // output: numbers
Console.WriteLine(nameof(numbers.Count)); // output: Count
Console.WriteLine(nameof(numbers.Add)); // output: Add
6.Permission Value Providers
解析:权限检查是可扩展的,继承自PermissionValueProvider[或实现IPermissionValueProvider]的任何类都可以参与权限检查。有三个预定义的Provider:
[1]UserPermissionValueProvider:从当前的声明中拿到当前用户ID并检查用户授权,用户声明由AbpClaimTypes.UserId静态属性定义。
[2]RolePermissionValueProvider:从当前的声明中拿到授予当前用户的角色集合并且判断角色是否具有指定的权限,角色声明由AbpClaimTypes.Role静态属性定义。
[3]ClientPermissionValueProvider:从当前声明中拿到当前客户端并检查客户端是否具有指定的权限,这在没有当前登录用户的客户端交互特别有用,客户端声明由AbpClaimTypes.ClientId静态属性定义。
7.Permission Store
解析:IPermissionStore是唯一需要从持久化源[通常是数据库]中读取权限值的接口,它的实现在权限管理模块。
8.AlwaysAllowAuthorizationService
解析:AlwaysAllowAuthorizationService类可以绕过授权服务,通常用于在需要禁用授权系统的集成测试中。
9.模型绑定
解析:
[1][FromQuery]:从查询字符串获取值。
[2][FromRoute]:从路由数据中获取值。
[3][FromForm]:从已发布的表单字段中获取值。
[4][FromBody]:从请求正文中获取值。
[5][FromHeader]:从HTTP标头中获取值。
10.模型绑定特殊数据类型
解析:
[1]IFormFile和IFormFileCollection:HTTP请求中包含的上传文件。还支持多个文件的IEnumerable<IFormFile>。
[2]CancellationToken:用于取消异步控制器中的活动。
[3]FormCollection:用于从发布的表单数据中检索所有的值。
11.包间依赖关系
解析:包间依赖关系:
12.领域层
解析:
[1]Domain.Shared包[项目]命名为CompanyName.ModuleName.Domain.Shared,包含常量、枚举和其它类型,它不能包含实体、存储库、域服务或任何其它业务对象。可以安全地与模块中的所有层使用,此包也可以与第三方客户端使用。
[2]Domain包[项目]命名为CompanyName.ModuleName.Domain,包含实体、仓储接口、领域服务接口及其实现和其它领域对象,Domain包依赖于Domain.Shared包。
13.应用服务层
解析:
[1]Application.Contracts包[项目]命名为CompanyName.ModuleName.Application.Contracts,包含应用服务接口和相关的数据传输对象[DTO]。Application contract包依赖于Domain.Shared包。
[2]Application包[项目]命名为CompanyName.ModuleName.Application,包含应用服务实现。Application包依赖于Domain包和Application.Contracts包。
14.基础设施层
解析:
[1]推荐为每个orm/数据库集成创建一个独立的集成包,比如Entity Framework Core和MongoDB。推荐比如,创建一个抽象Entity Framework Core集成的CompanyName.ModuleName.EntityFrameworkCore包。ORM集成包依赖于Domain包。不推荐依赖于orm/数据库集成包中的其它层。
[2]推荐为每个主要的库创建一个独立的集成包,在不影响其它包的情况下可以被另一个库替换。
15.HTTP层
解析:
[1]推荐创建命名为CompanyName.ModuleName.HttpApi的HTTP API包,为模块开发REST风格的HTTP API。HTTP API包只依赖于 Application.Contracts包,不要依赖Application包。推荐为每个应用服务创建一个Controller[通常通过实现其接口]。这些控制器使用应用服务接口来委托操作,它根据需要配置路由,HTTP方法和其它与Web相关的东西。
[2]推荐创建一个为HTTP API包提供客户端服务的HTTP API Client包,它的命名为Companyname.ModuleName.HttpApi.Client。这些客户端服务将应用服务接口实现远程端点的客户端。HTTP API Client包仅依赖于Application.Contracts包。推荐使用ABP框架提供的动态代理HTTP C#客户端的功能。
16.Web层
解析:推荐创建命名为CompanyName.ModuleName.Web的Web包,包含页面、视图、脚本、样式、图像和其它UI组件。Web包仅依赖于HttpApi包。
17.互联网开发核心技能
解析:
18.IRepository<TEntity, TKey>接口
解析:
[1]提供Insert方法用于保存新实体
[2]提供Update和Delete方法通过实体或实体id更新或删除实体
[3]提供Delete方法使用条件表达式过滤删除多个实体
[4]实现了IQueryable<TEntity>,所以可以使用LINQ和扩展方法FirstOrDefault,Where,OrderBy,ToList等
[5]所有方法都具有sync[同步]和async[异步]版本
19.只读仓储
解析:对于想要使用只读仓储的开发者,提供了IReadOnlyRepository<TEntity, TKey>与IReadOnlyBasicRepository<Tentity, TKey>接口。
20.在Swagger文档开启小绿锁
解析:Install-Package Swashbuckle.AspNetCore.Filters
21.ICurrentUser接口基本属性
解析:
[1]IsAuthenticated:如果当前用户已登录[已认证],则返回true,如果用户尚未登录,则Id和UserName将返回null
[2]Id(Guid?):当前用户的Id,如果用户未登录,返回null
[3]UserName(string):当前用户的用户名称,如果用户未登录,返回null
[4]TenantId(Guid?):当前用户的租户Id,对于多租户应用程序很有用,如果当前用户未分配给租户,返回null
[5]Email(string):当前用户的电子邮件地址,如果当前用户尚未登录或未设置电子邮件地址,返回null
[6]EmailVerified(bool):如果当前用户的电子邮件地址已经过验证,返回true
[7]PhoneNumber(string):当前用户的电话号码,如果当前用户尚未登录或未设置电话号码,返回null
[8]PhoneNumberVerified(bool):如果当前用户的电话号码已经过验证,返回true
[9]Roles(string[]):当前用户的角色,返回当前用户角色名称的字符串数组
22.JWT包
解析:Microsoft.AspNetCore.Authentication.JwtBearer
23.IDS4和JWT区别
解析:IdentityServer4默认支持两种类型的Token,一种是Reference Token,一种是JWT Token。
24.ABP框架
解析:
25.仓储[Repository]
解析:仓储用来操作数据库进行数据存取。仓储接口在领域层定义,而仓储的实现类应该写在基础设施层。
ABP VNext学习日记2相关推荐
- ABP VNext学习日记17
1.public static Assembly GetExecutingAssembly() 解析:得到包含的代码正在执行的程序集. 2.public interface IHostedServic ...
- ABP VNext学习日记20
1.AbpApiControllerActivator 解析:实现了IHttpControllerActivator接口,根据controller的类型生成指定的controller. 2.AbpDy ...
- ABP VNext学习日记15
1.Polly服务容错模式 解析: [1]错误处理fault handling:重试.熔断.回退 [2]弹性应变resilience:超时.舱壁.缓存 2.Polly错误处理步骤 解析: [1]定义条 ...
- ABP VNext学习日记3
1.ABP中的DTO 解析:在ABP的设计中,有两种不同类型的DTO,分别是用于新增.修改.删除的Input DTO,和用于查询的Output DTO. 2.Unit of Work 解析:工作单元与 ...
- ABP VNext学习日记21
1.public class PagedResultDto<T> : ListResultDto<T>, IPagedResult<T> 解析: public lo ...
- ABP VNext学习日记30
1.IDS4中的/connect/token接口 解析:固定写法,不是开发自定义的,只需要直接去使用就行了,注意调用方式时的输入参数. 2.RequestPasswordTokenAsync 解析: ...
- ABP VNext学习日记18
1.IAuthorizationService 解析:IAuthorizationService具有两个AuthorizeAsync方法重载:一个接受资源和策略名称,另一个接受资源并提供要评估的要求的 ...
- ABP VNext学习日记22
1.PreConfigureServices和PostConfigureServices 解析:AbpModule类还定义了PreConfigureServices和PostConfigureServ ...
- ABP VNext学习日记1
1.安装和更新ABP CLI 解析: dotnet tool install -g Volo.Abp.Cli dotnet tool update -g Volo.Abp.Cli 2.模块拆分原则 解 ...
- ABP VNext学习日记14
1.Abp.AbpBootstrapper 解析:这是一个主类,它负责开始全部的ABP系统. 2.Abp.Dependency.IocManager 解析:这个类用于直接执行依赖注入任务. 3.voi ...
最新文章
- Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
- 用 ffmpeg + m3u8-segment 将h264的ES流转换成m3u8的过程记录
- 一个超酷的横向多列响应式布局效果
- 用html编写一幅简单的画,使用html5画简单的折线图
- 初学react实现路由跳转_如何使用React构建模因制作者:初学者指南
- Exchange笔记之Exchange Server 2003前端后端部署
- Impala使用RPM安装过程
- LINUX 下安装git
- 数字积分法直线插补c语言,5.数字积分法直线插补.pdf
- 你应该了解的GPS经纬度
- (转载)硬盘安装XP64位系统
- 前端知识:使用layui模板搭建页面,简单快捷
- WLAN从入门到精通-1
- 应用程序无法正常启动(0xc000007b) 请单击确定关闭应用程序
- windows系统命令大全
- 如何运用SCQA发现问题?
- 程序员 面试如何介绍自己
- OpenGL PBO渲染视频数据 [转]
- R155附录5 Part A
- (二)单片机程序语言学习