­

非典那年記憶

  • 2020 年 2 月 12 日
  • 筆記

ABP core 的框架在過年期間,從1.0突然升級到2.0了,。 整個ABPCore 雖然版本變化 大,但使用流程基本不變吧, 我看官網上文檔基本完畢了,官網文檔有一個外國人影片,當時版本尚是0.18,總共有2小時吧。記錄個學習筆記吧!

課程內容主要步驟記錄: 

【】所包含的是對應項目名

1、生成項目

abp new   ,並編譯全部

2、修改連接字元串:

【DbMigrator】修改連接字元串,並執行這個項目,就實現資料庫的創建和寫入種子數據.   這時可以啟用【web】登錄網站並修改密碼

3、添加實體類,業務實體

【Domain】中添加Book, 繼承自審計聚合根  auditedAggregateRoot類。  這個類本身實現了一系統介面

4、添加項目的全局的共有類

【domain.shared】中添加BookType的枚舉類型。  它是整個解決方案共用的類型

5、在DBContext中註冊實體類

【EFCore】中,DbContext中添加DbSet<Book>  books;   

                         DbContextModelCreatingExtensions 中添加表名,表屬性,外鍵關係的配置

6、添加遷移文件

【EFC.DbMigrations】 執行add mirgrate "xxx"

7、添加   BookStoreDataSeedContributor 

【Domain】中,添加一個類BookStoreDataSeedContributor ,繼承自 IDataSeedContributor, ITransientDependency介面,實現SeedAsync方案

                           類中注入 Repository<Book,Guid>  和 GuidGenerator類型的兩個對象,  藉助它們來添加種子數據——三本書的資訊Book

8、執行【DbMigrator】,更新資料庫

不明白為什麼第7步中添加的類會自動被識別,ABP應該有什麼自動發現的機理。

9、添加DTO類

【Application.Contracts】添加BookDTO類,繼承自AuditedEntityDTO<Guid> 。 所有屬性和Book相同。

 Contracts是協議合約的意思,表示這個對象是應用層的一個實體,用戶交互數據的,所以叫Contracts

10,添加實體和DTO的映射關係 

【Application】ApplicationAutoMapperProfile.cs文件中,加一句話:  CreateMap(Book,BookDto)

11、創建CreateUpdateBookDTO類

【Application.Contracts】添加CreateUpdateBookDTO類。類不繼承其它任何類,  成員變數上添加 DataAnnotation ,數據註解!

這個DTO類竟然沒有ID這個欄位,更新時到底會是什麼個機制呢???

12、再添加實體和CreateUpdateBookDTO的映射關係

【Application】 再加一句:  CreateMap(CreateUpdateBookDTO,Book)

13、添加第一個IService 介面

【Application.Contracts】 添加 IBookAppService。繼承自: ICrudAppService  介面,比較複雜。它包含CRUD的幾個方法

注意,影片中,繼承的是IAsyncCrudAppService, 但官網示例程式碼是ICrudAppService。

14、編寫IService的實現類

【Application】添加BookAppService的類文件:   構造函數中,注入了Book的倉儲對象。

注意,影片中,繼承的是AsyncCrudAppService, 但官網示例程式碼是CrudAppService。

15、瀏覽自動生成的Swagger 介面,動態JavaScript代理

運行【WEB】項目,瀏覽   /swagger/index.html  ,可以看到通過服務,已經自動生成了相應介面

同時項目生成相應的前端js 代理,可以直接訪問API介面

acme.bookStore.book.getList({}).done(function (result) { console.log(result); });

16、 添加Razor 的頁面

【web】 添加頁面 Pages/Books/index.cshtml  ,頁面繼承了  @inherits Acme.BookStore.Web.Pages.BookStorePage

                添加菜單 Menus/ BookStoreMenuContributor.cs  中添加

17、添加國際化的內容

【Domain.shared】中添加對應的鍵的顯示內容!

18、編寫一個基於 abp UI的表格

【web】 index.cshtml中,添加一組 <abp-*>的標籤來寫頁面,tag-helpers簡化頁面

js文件中,用DataTable.js插件來生成表格。  第三方的表格插件已經內置,且abp寫了許多輔助的東西來適配第三方的插件

  • abp.libs.datatables.createAjax是幫助ABP的動態JavaScript API代理跟Datatable的格式相適應的輔助方法.