這兩天看了一下ABP,作個簡單的學習記錄。記錄主要有如下內容:前端
ABP官網:https://aspnetboilerplate.com/
Github:https://github.com/aspnetboilerplatevue
進入官網
node
Get started,選擇先後端技術棧,我這裏就選.net core 3.x和vue。
git
填寫本身的項目名稱,郵箱,而後點create my project就能夠下載項目了。
github
解壓文件
sql
首先運行後端項目,打開/aspnet-core/MyProject.sln
數據庫
改一下MyProject.Web.Host項目下appsettings.json的數據庫鏈接字符串,若是本地安裝了mssql,用windows身份認證,不改也行
npm
數據庫默認是使用mssql的,固然也能夠改其餘數據庫。json
將MyProject.Web.Host項目設置爲啓動項,打開程序包管理器控制檯,默認項目選擇DbContext所在的項目,也就是MyProject.EntityFrameworkCore。執行update-database
windows
數據庫已成功建立:
Ctrl+F5,不出意外,瀏覽器就會看到這個界面:
後端項目成功運行了,下面運行一下前端項目,先要確保本機有nodejs環境並安裝了vue cli,這個就不介紹了。
/vue目錄下打開cmd執行:npm install
install完成後執行:npm run serve
打開瀏覽器訪問http://localhost:8080/,不出意外的話,會看到這個界面:
使用默認用戶 admin/123qwe 登陸系統:
至此,先後端項目都已成功運行。
那麼基於abp的二次開發該從何下手呢,最簡單的,好比要增長一個數據表,而且完成最基本CRUD該怎麼作?
實體類須要放在MyProject.Core項目下,我新建一個MyTest文件夾,並新增一個Simple類,隨意給2個屬性。
我這裏繼承了abp的Entity
public class Simple : Entity<int> { public string Name { get; set; } public string Details { get; set; } }
修改MyProject.EntityFrameworkCore項目的/EntityFrameworkCore/MyProjectDbContext:
public class MyProjectDbContext : AbpZeroDbContext<Tenant, Role, User, MyProjectDbContext> { /* Define a DbSet for each entity of the application */ public DbSet<Simple> Simples { get; set; } public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Simple>(p => { p.ToTable("Simples", "test"); p.Property(x => x.Name).IsRequired(true).HasMaxLength(20); p.Property(x => x.Details).HasMaxLength(100); }); } }
而後就能夠遷移數據庫了,程序包管理器控制檯執行:add-migration mytest1
,update-database
刷新數據庫,Simples表已生成:
進入MyProject.Application項目,新建一個MyTest文件夾
CreateSimpleDto,新增Simple數據的傳輸對象,好比ID,建立時間,建立人等字段,就能夠省略
public class CreateSimpleDto { public string Name { get; set; } public string Details { get; set; } }
PagedSimpleResultRequestDto,分頁查詢對象
public class PagedSimpleResultRequestDto : PagedResultRequestDto { /// <summary> /// 查詢關鍵字 /// </summary> public string Keyword { get; set; } }
SimpleDto,這裏跟CreateSimpleDto的區別就是繼承了EntityDto,多了個ID屬性
public class SimpleDto : EntityDto<int> { public string Name { get; set; } public string Details { get; set; } }
SimpleProfile,用來定義AutoMapper的映射關係清單
public class SimpleProfile : Profile { public SimpleProfile() { CreateMap<Simple, SimpleDto>(); CreateMap<SimpleDto, Simple>(); CreateMap<CreateSimpleDto, Simple>(); } }
注意,類名參考abp的規範去命名。
ISimpleAppService,Simple服務接口。我這裏繼承IAsyncCrudAppService,這個接口中包含了增刪改查的基本定義,很是方便。若是不須要的話,也能夠繼承IApplicationService本身定義
public interface ISimpleAppService : IAsyncCrudAppService<SimpleDto, int, PagedSimpleResultRequestDto, CreateSimpleDto, SimpleDto> { }
SimpleAppService,Simple服務,繼承包含了增刪改查的AsyncCrudAppService類,若是有須要的話能夠override這些增刪改查方法。也能夠繼承MyProjectAppServiceBase,本身定義。
public class SimpleAppService : AsyncCrudAppService<Simple, SimpleDto, int, PagedSimpleResultRequestDto, CreateSimpleDto, SimpleDto>, ISimpleAppService { public SimpleAppService(IRepository<Simple, int> repository) : base(repository) { } /// <summary> /// 條件過濾 /// </summary> /// <param name="input"></param> /// <returns></returns> protected override IQueryable<Simple> CreateFilteredQuery(PagedSimpleResultRequestDto input) { return Repository.GetAll() .WhereIf(!input.Keyword.IsNullOrWhiteSpace(), a => a.Name.Contains(input.Keyword)); } }
從新運行項目,不出意外的話,Swagger中就會多出Simple相關的接口。
ABP是一個優秀的框架,基於ABP的二次開發確定會很是高效,但前提是須要熟練掌握ABP,弄清楚他的設計理念以及他的一些實現原理。
之後有時間的話再深刻學習一下。文中若是有不妥之處歡迎指正。