Asp.netcore如何使用Efcore+mysql来构建CodeFirst,以及如何按照DDD的设计思路来对代码进行分层。
主题:Asp.netcore Code First +DDD学习笔记
目录:
【一】 CodeFirst+DDD项目结构的构建
【二】Asp.Netcore使用Panda.DynamicWebApi来进行Controller解耦
【三】Asp.NetCore使用Efcore+Mysql实现CodeFirst
【四】EfCore实现全自动化迁移
案例代码下载点击
首先我们要知道什么是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