【一】CodeFirst+DDD项目结构的构建@Asp.netcore Code First +DDD学习笔记

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,如图所示:

                 【一】CodeFirst+DDD项目结构的构建@Asp.netcore Code First +DDD学习笔记_第1张图片

  (2)项目之间建立引用

            Api引用Controller,Controller引用Domain和Dto,Domain引用EfCoreRepository,Dto什么都不引用,EfCoreRepository什么都不引用。如下图所示:

【一】CodeFirst+DDD项目结构的构建@Asp.netcore Code First +DDD学习笔记_第2张图片 【一】CodeFirst+DDD项目结构的构建@Asp.netcore Code First +DDD学习笔记_第3张图片 【一】CodeFirst+DDD项目结构的构建@Asp.netcore Code First +DDD学习笔记_第4张图片

    (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

你可能感兴趣的:(Asp.netcore,DDD,EfCore)