ChristDDD

2025-12-07 0 171

一个基于 DDD 领域驱动设计 + CQRS 命令查询职责分离 的 .net core 框架,完全开源,并且有博客教程,地址在下边。
项目我是借鉴了 https://*gith**ub.com/EduardoPires/EquinoxProject 来讲解的,请支持原作者!因为他没有文档,所以我就写了这个系列。


给个星星! ️

如果你喜欢这个项目或者它帮助你, 请给 Star~(辛苦星咯)

Tips

连接字符串统一在web层下的appsettings.json,
DefaultConnection_file文件里的内容,就是DefaultConnection字符串。

  /*
    * mysql和sqlserver的迁移操作步骤一致,不过本项目的迁移文件已经迁移好,在Data文件夹下:
    * msql使用MigrationsMySql文件夹下的迁移记录,卸载/删除另一个Migrations文件夹
    * sqlserver使用Migrations文件夹下的迁移记录,卸载/删除另一个MigrationsMySql文件夹
    * 
    * 当然你也可以都删掉,自己重新做迁移。
    * 
    一、迁移项目1(一定要切换到 Christ3D.Infrastruct 项目下,使用 Package Manager Console):
      1、add-migration InitStudentDbMysql -Context StudyContext  -o MigrationsMySql
      2、add-migration InitEventStoreDbMysql -Context EventStoreSQLContext -o MigrationsMySql/EventStore
      3、update-database -Context StudyContext
      4、update-database -Context EventStoreSQLContext
    二、迁移项目2【弃用,因为现在是使用IdentityServer4】(一定要切换到 Christ3D.Infrastruct.Identity 项目下,使用 Package Manager Console):
      1、add-migration InitIdentityDbMysql -Context ApplicationDbContext -o Data/MigrationsMySql/ 
      2、update-database -Context ApplicationDbContext

   */

知识点

1、概念篇

实体对象:具有唯一标识,能单独存在且可变化的对象
值对象:不能单独存在或在逻辑层面单独存在无意义,且不可变化的对象
聚合:多个对象的集合,对外是一个整体
聚合根:聚合中可代表整个业务操作的实体对象,通过它提供对外访问操作,它维护聚合内部的数据一致性,它是聚合中对象的管理者

2、结构篇

(图片来源于网络)


三大平台同步直播

博客园:https://www.cnb***logs.com/laozhang-is-phi/p/9806335.html

简 书:https://www.jia**ns*hu.com/c/fe7dd7fc5372

码云:https://g*it*ee.com*/laozhangIsPhi/ChristDDD


目录:

  • 一 ║ D3模式设计初探 与 我的计划书
  • 二 ║ DDD入门 & 项目结构粗搭建
  • 三 ║ 简单说说:领域、子域、限界上下文
  • 四 ║一个让你明白DDD的小故事 & EFCore初探
  • 五 ║聚合:实体与值对象 (上)
  • 六 ║聚合 与 聚合根 (下)
  • 七 ║项目第一次实现 & CQRS初探
  • 八 ║剪不断理还乱的 值对象和Dto
  • 九 ║从军事故事中,明白领域命令验证(上)
  • 十 ║领域驱动【实战篇·中】:命令总线Bus分发(一)
  • 十一 ║ 基于源码分析,命令分发的过程(二)
  • 十二 ║ 核心篇【下】:事件驱动EDA 详解
  • 十三 ║ 当事件溯源 遇上 粉丝活动

主要的流程图,在下边的图中可以体现:

系统环境

  windows 10、SQL server 2012、Visual Studio 2017、Windows Server 2008 R2、Linux Ubuntu、

开发环境

  Visual Studio 15.3+、.NET Core SDK 2.0+、

1、知识点(补充中)

    ASP.NET Core 2.1.2  基本框架
    ASP.NET MVC Core  实现mvc web页面
    ASP.NET WebApi Core  实现 api 接口
    ASP.NET Identity Core  身份验证
    Entity Framework Core 2.0  实现ORM数据持久化
    Dapper (待定)
    .NET Core 原生 DI  实现依赖注入
    AOP  面向切面
    Autofact(待定)IoC
    AutoMapper  实现Dtos
    FluentValidator验证
    Swagger UI  实现接口文档展示
    MediatR  基于内存级别的消息发布订阅
    Azure  云服务发布

2、特性(补充中)

    领域驱动设计(Domain Driven Design (Layers and Domain Model Pattern)
    命令查询职责分离(CQRS:Command Query Responsibility Segregation)
    领域通知 (Domain Notification)
    领域驱动 (Domain Events)
    事件驱动架构 (EDA)
    事件回溯 (Event Sourcing)
    最终一致性 (Eventually Consistent)
    工作单元模式 (Unit of Work )
    泛型仓储 (Repository and Generic Repository)

编者按:
1、本项目我是借鉴了 https://*gith**ub.com/EduardoPires/EquinoxProject 来讲解的,请支持原作者!因为他没有文档,所以我就写了这个系列。
2、可能你会说我是抄袭,但是我自己写的时候,结构不是这样的,我当时是按照下边写的(如果你和我下边的分层一样,那就证明我不是瞎说的了):

应用层:除了Service和IService、DTO、还有使用 CQRS 方法的查询、接受的命令,事件驱动的通信(集成事件),但是没有业务规则;

领域(模型)层:这里主要放的是领域实体、值对象、聚合和事件模型、Bus等主要都是模型,非贫血;

基础层:就是ORM的持久化相关;

U I 层:显示页面;

不过我写的时候感觉各层之间凌乱,不适合初学者学习,所以就想着要改变一下,找一个清晰明了的,对比了Git上的各种大神结构,偶然发现了EduardoPires的代码,感觉很清晰,就按照他这个来了。 说白了,就是把CQRS读写分离和事件驱动全部放到领域层了,然后又提炼出来一个领域核心Doman.Core层。

下载源码

通过命令行克隆项目:

git clone https://github.com/anjoy8/ChristDDD.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 ChristDDD https://www.zuozi.net/32021.html

angularjs style guide
上一篇: angularjs style guide
Twine
下一篇: Twine
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务