Asp.netcore如何使用Efcore+mysql來構建CodeFirst,以及如何按照DDD的設計思路來對代碼進行分層。
主題:Asp.netcore Code First +DDD學習筆記
目錄:
【二】Asp.Netcore使用Panda.DynamicWebApi來進行Controller解耦
【三】Asp.NetCore使用Efcore+Mysql實現CodeFirst
首先我們要知道什麼是DDD:
DDD,英文全稱:Domain-Driven-Design 領域驅動設計,以領域模型爲驅動來進行研發設計和代碼構建等。具體操作過程和含義推薦閱讀《領域驅動設計》(軟件核心複雜性應對之道)這本書。那麼在代碼中我們應該如何設計呢?項目該如何構建呢?在這裏參照ABP框架的DDD來手動搭建一個進行深入學習和理解,本文爲個人的學習筆記,有不對之處請大神給與指點和糾正。
在代碼裏面我們首先要把代碼按照DDD的方式進行拆分,參照ABP框架分爲:服務層(Api),邏輯層(Controller),數據傳輸對象(Dto),領域模型層(Domain),數據持久化層(EfCoreRepository)等。
【一】CodeFirst+DDD項目結構的構建
(1) 先建項目,基於EfCore+mysql的codefrist和asp.netcore api
一個 asp.net api項目命名爲Api,四個.netstand 2.0 的類庫命名如下:Controller,Domain,Dto,EfCoreRepository,如圖所示:
(2)項目之間建立引用
Api引用Controller,Controller引用Domain和Dto,Domain引用EfCoreRepository,Dto什麼都不引用,EfCoreRepository什麼都不引用。如下圖所示:
(3)組件的介紹:
a.Panda.DynamicWebApi動態生成Api組件,爲了把Controller從Api項目內解耦出來,如果直接拿出來,你會發現接口消失了,沒有用了,這時候就需要使用該組件來動態生成Api了。
b.Swagger接口管理組件,可以自動生成接口調試頁面,以及接口描述。爲了更方便的調試接口和管理接口這時候我們需要載入該組件,該組件完美兼容Panda.DynamicWebApi組件,支持動態生成的接口。
c.AutoMapper 實體映射組件。該組件主要做Entity和Dto之間的相互轉換來使用
d.Microsoft.EntityFrameworkCore 該組件是efcore的核心組件
e.Microsoft.EntityFrameworkCore.Design 該組件是efcore的核心組件
f.Microsoft.EntityFrameworkCore.Tools 該組件是efcore的核心組件
g.MySql.Data.EntityFrameworkCore 該組件是mysql對支持efcore的核心組件
h.MySql.Data.EntityFrameworkCore.Design 該組件是mysql對支持efcore的核心組件
(4)準備一個mysql數據庫
這時候一個Asp.netcore Code First +DDD的框架雛形基本出來了,下一篇將開始進行填充。
github地址:https://github.com/houliren/Asp.netcore-Code-First-DDD