abp入門系列目錄——學習abp框架之實操演練
這一節我們主要和領域層打交道。首先我們要對abp的體系結構以及從模板建立的解決方案進行一一對應。網上有**生成器去簡化我們這一步的任務,但是不建議初學者去使用。
領域層就是業務層,是乙個專案的核心,所有業務規則都應該在領域層實現。
實體(entity): 實體代表業務領域的資料和操作,在實踐中,通過用來對映成資料庫表。
倉儲(repository): 倉儲用來運算元據庫進行資料訪問。倉儲介面在領域層定義,而倉儲的實現類應該寫在基礎設施層。
領域服務(domain service): 當處理的業務規則跨越兩個(及以上)實體時,應該寫在領域服務方法裡面。
領域事件(domain event): 在領域層有些特定情況發生時可以觸發領域事件,並且在相應地方捕獲並處理它們。
工作單元(unit of work): 工作單元是一種設計模式,用於維護乙個由已經被修改(如增加、刪除和更新等)的業務物件組成的列表。它負責協調這些業務物件的持久化工作及併發問題。
確定了解決方案下每個專案分別對應那一層後,我們開始建立task實體。
1.在領域層建立tasks資料夾,並建立task實體類;
2.abp中所有的實體類都繼承自entity
,而entity
實現了ientity
介面;而ientity
介面是乙個泛型介面,通過泛型指定主鍵id型別,預設的entity
的主鍵型別是int型別。
建立task,肯定需要儲存建立時間,可以通過實現審計模組中的ihascreationtime
來實現這種通用功能。**如下:
namespace learningmpaabp.tasks
[foreignkey("assignedpersonid")]
public user assignedperson
[required]
[maxlength(maxtitlelength)]
public string title
[required]
[maxlength(maxdescriptionlength)]
public string description
public taskstate state
public datetime creationtime
public task()
public task(string title, string description = null) : this()
}public enum taskstate : byte
}
其中定義了taskstate
狀態列舉。並新增了assignedperson
導航屬性,用來儲存分配任務到某個使用者。其中[required]、[maxlength]特性是用來進行輸入校驗的。
3.定義好實體之後,我們就要去dbcontext
中定義實體對應的dbset
,以應用code first 資料遷移。找到我們的基礎服務層,即以entityframework結尾的專案中,找到dbcontext類,新增以下**
//todo: define an idbset for your entities...
public idbsettasks
4.執行code first資料遷移。
namespace learningmpaabp.migrations.seeddata
static defaulttestdatafortask();}
public void create()}}
}
然後在configuration
類中的seed
方法中,新增以下**。
new defaulttestdatafortask(context).create();
至此,task實體類成功建立。
原始碼已上傳至github-learningmpaabp,可自行參考。
2 abp 領域層建立實體
領域層 learningmpaabp.core專案 基礎服務層 entityframework對應的專案 1 在領域層新建tasks資料夾 在資料夾下新建task類 但是注意 task類必須要繼承entity類,entity類又實現了ientity介面 和 ientity介面 其中 ientity裡...
ABP領域層 實體
參考陽光銘睿的教程 實體類 在abp中,實體類繼承自 entity 類public class person entity person類的父類中有 id屬性,id是該實體的主鍵,預設型別是 int,如果想給id定義其他型別,如下,也可以設定為 string,guid public class pe...
ABP入門系列(18) 使用領域服務
abp入門系列目錄 學習abp框架之實操演練原始碼路徑 github learningmpaabp 自上次更新有乙個多月了,發現越往下寫,越不知如何去寫。特別是當遇到ddd中一些概念術語的時候,尤其迷惑。如果只是簡單的去介紹如何去使用abp,我只需參照官方文件,實現到任務清單demo中去就可以了,不...