It is Domai Driven Design Based Layering Model, not Microservice Compatible;
按照官方文档案例:https://docs.abp.io/zh-Hans/abp/latest/Tutorials/Part-1?UI=MVC
一:构建实体,配置EFCore
按照官方文档,执行 abp new Acme.BookStore --template app --database-provider ef --ui mvc --mobile none
.Domain是实体,领域服务和其他核心域对象【暂时只要知道可以编写实体结构即可】
ABP为实体提供了两个基类: AggregateRoot和Entity ,实例中创建的Book.cs继承 AuditedAggregateRoot,而AuditedAggregateRoot =》CreationAuditedAggregateRoot 【添加了CreationTime, CreatorId】=》AggregateRoot =》Entity,实质上都源于Entity;
其中的Guid是实体的主键类型,当通过自设Guid时,不推荐使用 Guid.NewGuid() ,我猜测是因为第一个Guid是随机产生的,后续带有连续性,而数据库的索引需要排序,进行实体映射的时候,性能比自主new一个会高些;
.Domain.Shared则是通过项目引用,起到一个定义公共结构【常量,类,枚举等】,比如实例中的BookType枚举类型;
.EFCore,在BbContext中将实体添加到DbCOntext中
在DbContextModelCreatingExtensions中配置实体,配置实体默认值,限制,关联等【因为EFCore不是很熟悉,这里不延申了】
更新数据库:当进行到数据库数据库add migration 时,需在 EFCore.DbMigrations种添加appsettings.json【不能是引用】,其中添加ConnectionStrings,可参考.Web种的appsettings.json文件;
二:创建服务
完成以上步骤,就可以创建服务对实体进行管理,模板中使用了 1,.Application.Contracts,2,.Application为应用程序层
.Application.Contracts主要包含你的DTO和应用程序服务接口
DTO类【 数据传输对象 】是为表示层和应用层传递数据, DTO是VO【视图对象,用于展示层】和服务层之间的数据传输对象,因保持简单特性,单个对象不应包换业务逻辑,只做承载,但是DTO的数据聚合则测试,例如服务启动时,读取数据数据库设置+DTO+本地设置+其他数据,共同组成的逻辑公共聚合体,在业务中则需要对还有DTO的部分结合其他一起测试,返回数据服务时,可返回DTO【例子可能只有我懂吧,嘿嘿嘿】
.Application包含应用程序服务的实现
这里负责的任务是将实体转化为DTO对象,使用AutoMapper库进行映射时自动执行转换,启动模板配置了AutoMapper,那么我们可以认为,.Application就是为了定义映射关系;
接下来,再次创建从客户端到服务器的DTO类,也就是官方实例中的CreateUpdateBookDto,也可以看作是Asp .netCore web API中的关于各种请求的参数配置【如果写过web API】,加入了属性验证,这里的验证又ABP框架自动验证,这里Dto写在一起让人感觉有些杂,但是把文档先往下看,我们这里做一个记录,就是Dto存在2种,即a:实体Dto,b:客户端Dto
客户端的Dto创建完成后,你懂的,去AutoMapper中定义映射关系,重复步骤即可
定义完成后,最后就是定义服务,写服务,必先定义接口,在.Contracts中添加接口,然后在.Application对接口进行实现,最后根据官方提示,就可以在控制台有效果了
考虑后续本人不用用到Razor的去做实现,后续就忽略,准备接入Blazor+微服务体系,任重而道远,吾将上下而求索;
希望ms技术能在2021年迎来爆发,告别996,告别奋斗逼,同志加油!
网友评论