DDD领域驱动模型设计 什么是DDD 软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前,通常需要进行大量的业务知识梳理,而后到达软件设计的层面,最后才是开发.而在业务知识梳理的过程中,我们必然会形成某个领域知识,根据领域知识来一步步驱动软件设计,就是领域驱动设计的基本概念. 听起来这和传统意义的软件开发没啥区别,只是换了点新鲜的名词而已,其实不然. 该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的In…
搭建一个.net core webapi项目  在开始之前,请先安装最新版本的VS2017,以及最新的.net core 2.1. 首先创建一个Asp.Net Core Web应用程序 这个应用程序是可以直接运行的,采用的微软默认的页面.但是在运行中会出现这样的页面,因为默认使用用https导致 那么可以去掉这块.右键项目属性,在调试中去掉 https://localhost:5001;   就ok了. 那么就可以运行了,当然也可以发布到IIS等各个容器内,这个就不说了.…
上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(2)> 这篇文章主要是对 DDD.Sample 框架增加 Transaction 事务操作,以及增加了一些必要项目. 虽然现在的 IUnitOfWork 实现中有 Commit 的实现,但也就是使用的 EF SaveChanges,满足一些简单操作可以,但一些稍微复杂点的实体操作就不行了,并且 Rollback 也没有实现. 现在的 UnitOfWork 实现代码: publi…
上一篇:<DDD 领域驱动设计-如何完善 Domain Model(领域模型)?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 需要注意的是,业务流程并不是工作流程,在领域模型中,业务流程的控制很重要,在上篇的领域模型中我们就忽略了这一点,所以在后面的实现中,出现了一些严重的问题,主要是管理员审核 JS 权限申请的业务流程. 先看一下 JsPermissionApply 实体中的 Pass 操作代码: publ…
前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初探系列文章: C#进阶系列——DDD领域驱动设计初探(一):聚合 C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上) C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下) C#进阶系列——DDD领域驱动设计初探(四):WCF搭建 C#进阶系列——DD…
1 前置阅读 在阅读本文章之前,你可以先阅读: DDD领域驱动设计是什么 DDD领域驱动设计:实体.值对象.聚合根 DDD领域驱动设计:仓储 MediatR一个优秀的.NET中介者框架 2 什么是CQRS? CQRS,即命令和查询职责分离,是一种分离数据读取与写入的体系结构模式. 基本思想是把系统划分为两个界限: 查询,不改变系统的状态,且没有副作用. 命令,更改系统状态. 我们通过Udi Dahan的<Clarified CQRS>文章中的图来介绍一下: 2.1 查询 (Query) 上图中…
 如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.)                                                                                                                                                              …
 基于DDD领域驱动设计的思想,在开发具体系统时,需要先建立不同的层级包.主要是梳理不同层面(应用层,领域层,基础设施层,展示层)包括的功能目录,每一个层面应该包括哪些模块.本例所讲述的分层是DDD落地方案中常用的一种(参考),且本例适当做了调整和细化.详细分层目录参考下图: 1. 展示层 展现层(用户接口层)(Presentation Layer):负责以Restful的格式接受Web请求,然后将请求路由给Application层执行,并返回视图模型(View Model),其载体通常是DTO…
不以规矩,不能成方圆.                                                                     -战国·邹·孟轲<孟子·离娄章句上> 1. 前言 为什么要使用DDD领域设计?请参考以下博客: <万字长文,结合电商系统说明DDD> DDD领域驱动设计,对比(dao+service)的脚本式编程,主要还是将以前的脚本代码拆散,以实体为载体,协调各个模块实现业务功能.DDD领域设计有如下好处: 强调实体的概念,将现实世界与软…
从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品.所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的. 再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备.但是最近由于各种原因,导致服务经常出故障.所以,我们希望通过各种措施提高服务的质量和稳定性.其中的一个措施就是希望能做一个灰度发布的平台,这个…