初識ABP vNext(1) 開篇計畫 基礎知識

2022-02-09 06:22:54 字數 2652 閱讀 3569

目錄最後

abp vnext(以下簡稱abp)的前身是asp.net boilerplate(老版abp),它不是乙個簡單的版本更新,而是完全基於.net core的重寫。之前有聽說過abp框架,但是一直沒有去詳細了解。最近認真學習了一下,準備記錄下自己的一些心得,計畫分為3部分來進行:

abp基礎(就是官網上一些基本的功能)

abp實戰(使用abp+vue開發乙個簡單專案)

abp模組化(微服務簡單介紹)

首先,這是以乙個0基礎的視角去寫的,所以會比較基礎,適合新手。文中如果有不對的地方,大家可以幫我指出來相互學習。。。

abp官網:

abp github:

要學習abp,首先肯定要認真看一下官方的文件,雖然目前官方文件還不完整;然後對哪一部分不理解的,可以適當的閱讀一下原始碼。

本篇簡單介紹一下abp官方文件上一些重要的關鍵字,先理解這些關鍵字,才能更好的進一步學習。

審計是用於追蹤資料變化的過程。平時開發中,你一定經常見到類似建立時間、建立人、修改時間、修改人等屬性,這些屬性就是用於資料審計。abp框架提供了一些介面和基類來標準化這些屬性,並自動設定它們的值;並且abp提供了乙個可擴充套件的審計日誌系統,自動化的根據約定記錄審計日誌,並提供配置來控制審計日誌的級別。abp中審計相關基類/介面有:iauditedobjectauditedentityauditedaggregateroot等等。

使應用程式支援多國語言。abp的本地化系統與asp.net core的本地化相容。

事件匯流排是對觀察者(發布-訂閱)模式的一種實現。它是一種集中式事件處理機制,允許不同的元件之間進行彼此通訊而又不需要相互依賴,達到一種解耦的目的。

如果沒有接觸過event bus,可能不太好理解。乙個不太恰當的例子:a需要租房,b需要把房子租出去,a想直接找到b是比較困難的,a也不想去認識b,所以才有房產中介c,c就是event bus;b提前跟c說我的房子需要出租,a跟c說我給你錢你幫我租乙個房,那麼c很容易就幫a找到b完成租房,a甚至不需要知道b是誰,這裡a就是事件的發布者,b是事件的訂閱者。abp支援本地event bus和分布式event bus。

多租戶是一種軟體架構技術,這種架構可以讓多個租戶共用相同的系統,並且可以確保各租戶間資料的隔離性。相信很多人都遇到過類似需求,同乙個系統中根據不同客戶區分資料;通常我們會在資料庫表中增加乙個客戶id作為標識,或者根據不同客戶讀取不同的資料庫,這都是多租戶資料隔離的實現方式,想自己很好的實現多租戶還是很繁瑣的。abp的多租戶模組提供了建立多租戶應用程式的基本功能,可以很輕鬆的幫你實現多租戶。

乙個沒有從其屬性,而是通過連續性和身份的線索來定義的物件。

官方文件中這句話非常難理解。。。

簡單來說,當乙個物件只能由他的標識(id)來區分,而不是從其他屬性來區分時,這種物件被稱為實體。比如有很多叫「張三」的男人,你不能通過姓名和性別來區分到底是哪個張三,只能通過id。實體是可以持續變化的,我們可以對實體進行多次修改,但是無論怎麼修改,實體始終擁有它唯一的標識。ddd中的實體通常都是充血模型,充血模型就是實體中不光有屬性,還會包含行為(方法),反之dto,viewmodel就是典型的貧血模型。實體通常對映到關係型資料庫的表中,abp中實體相關的基類/介面有:entityientityauditedentity等等。

值物件和實體恰好相反,它不需要唯一標識,並且它不可以被改變。值物件通常是用來度量和描述事物,當你只關注某個物件的屬性時,該物件便可以是乙個值物件。比如「北京」就是「北京」,不存在id=1或者id=2的北京的說法。當然,值物件雖然不存在唯一標識,但是不代表它在資料庫中就沒有id主鍵。。。

聚合是業務邏輯緊密關聯的實體和值物件組合而成,聚合是資料修改和持久化的基本單元,聚合後產生的根實體稱為聚合根。若乙個聚合僅有乙個實體,那這個實體就是聚合根。聚合根被視為乙個單元,你不能單獨去修改聚合根中的子實體。例如,某個業務流程中,會操作a、b、c、d四個物件(簡單理解為資料庫表),那麼將abcd聚合,產生乙個聚合根e,對外部來說只需要操作e就可以了,領域內部會處理好abcd。這樣一方面避免了多個物件的混亂,另一方面也保證了資料的完整性,不會出現ab操作成功了,cd操作失敗了,導致資料庫產生髒資料。

聚合根引用聚合根:通過id。

聚合根引用實體:通過物件(導航屬性)。

聚合根引用值物件:通過物件(導航屬性)。

倉儲用於操作領域物件(實際就是運算元據庫),通常會為每個聚合根或不同的實體建立對應的倉儲。abp也提供了通用的泛型倉儲:irepository,內建了增刪改查基本功能,直接注入就可以使用。

通常領域物件不適合直接在應用層與展示層之間傳遞,比如user中的passwod欄位,這時候就需要用到dto,dto和viewmodel類似。abp提供了一些dto基類/介面:ientitydtoentitydtoauditedentitydto等等。

uow模式是為了保證一次業務操作的資料完整性。abp框架的uow實現提供了對應用程式中的資料庫連線和事務範圍的抽象和控制,使用abp的話通常你不用自己去寫資料庫事務相關**。實際上工作單元不一定非要建立資料庫事務,比如http get請求就不會啟動事務性uow,它們仍然啟動uow,但不建立資料庫事務。這一切都由abp框架自動完成。

初識revit二開

把對應的dll和addin拷貝到c programdata autodesk revit addins 2017即可。2.以類庫形式編寫程式 c windows 類庫 新增兩個引用revitapi.dll和revitapiui.dll,在revit安裝路徑下 以下是我電腦中位置 e revit201...

1 初識溢位

一直沒系統的學下這個,以為這玩意早特麼過時的東西,後來看到還是灰常有必要的,所以。溢位是什麼玩意就不介紹了,看個簡單例子 strcpy原型宣告 extern char strcpy char dest,char src 功能 把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間...

Android TV開發經驗總結 初識TV開發

剛接觸tv開發,需要我們轉變下思路,在tv開發中沒有以前我們手機端的什麼 dispatchtouchevent onintercepttouchevent ontouchevent 事件來分發,而需要使用dispatchkeyevent onkeydown onkeylisenter 等事件來分發處...