首页
学习
活动
专区
工具
TVP
发布

领域驱动设计DDD实战进阶

DDD第一波视频课程:请关注 “msshcj” 微信公众号 QQ群:309287205
专栏作者
73
文章
67890
阅读量
161
订阅数
微服务实战(九):落地微服务架构到直销系统(回顾总结)
这个系列我们大概写了八篇文章,将微服务的最重要的内容过了一遍。当然其中有些内容还没有涉及到,比如Docker(不是微服务架构风格中必须的)等,关于Docker我们自己可以在网上找找其他文章。
用户1910585
2018-11-07
7530
微服务实战(八):落地微服务架构到直销系统(服务高可用性)
在微服务架构风格的系统中,如果单个微服务垮掉或地址不可访问,虽然对系统的影响是有限的,但我们也必须采取一定的手段来保证每个微服务尽量可用;并且在大并发的情况下,虽然可以通过EDA消息队列处理的方式提高吞吐量,但仍然需要WebApi能够更加高效的侦听用户请求,处理消息,即使在某个服务短暂不可用的情况下。本篇文章主要来详细讲一讲要保证微服务的高可用性,可以通过哪些手段来实现。
用户1910585
2018-10-11
8850
微服务实战(六):落地微服务架构到直销系统(事件存储)
在CQRS架构中,一个比较重要的内容就是当命令处理器从命令队列中接收到相关的命令数据后,通过调用领域对象逻辑,然后将当前事件的对象数据持久化到事件存储中。主要的用途是能够快速持久化对象此次的状态,另外也可以通过未来最终一致性的需求,通过事件数据将对象还原到一个特定的状态,这个状态通常是通过对象事件的版本来进行还原的。
用户1910585
2018-09-29
5760
微服务实战(五):落地微服务架构到直销系统(构建高性能大并发系统)
在现代系统中,特别是互联网软件,通常会涉及到大量用户的并发访问,我们的系统一定要在架构上支持高性能、大并发的访问。一个高性能的系统通常由很多的方面组成,包括数据库高性能、Web服务器高性能、负载均衡、缓存、软件架构等。我们这篇文章先从软件开发架构的角度作为切入点来介绍如何构建高性能的系统。
用户1910585
2018-08-14
6670
DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)
前面我们花了14篇的文章来给大家介绍经典DDD的概念、架构和实践。这篇文章我们来做一个完整的总结,另外生成一个Api接口文档。 一.DDD解决传统的开发的几大问题: 没有描述需求的设计模型;而是直接通过数据库表的方式体现,也就是需求与设计是脱节的。 编码的架构也没有与设计和需求对应起来。 业务逻辑与技术混在一起;业务逻辑可能直接调用的数据访问,这样把业务逻辑与数据访问的技术混在一起。 开发没有层次感和节奏感;系统没有一个统一的约束,开发人员没有一个统一的节奏,这主要体现在随意的编码。 Bug 定位困难:当系
用户1910585
2018-07-04
1.1K0
DDD实战进阶第一波(十二):开发一般业务的大健康行业直销系统(订单上下文POCO模型)
在本系列前面的文章中,我们主要讨论了产品上下文与经销商上下文相关的实现,大家对DDD的方法与架构已经有了初步的了解。 但是在这两个界限上下文中,业务逻辑很简单,也没有用到更多的值对象的内容。从这篇文章开始,我们来讲讲订单界限上下文实现的内容, 里面的业务逻辑相对复杂一些,而且有大量值对象的引入来进行逻辑的处理。 订单上下文的需求主要是生成相应的订单项,每个订单项中有相关的订单产品和购买数量并生成订单项总额、订单项总PV,同时订单项总额 和订单项总PV会累加到订单总额和订单总PV中,同时会根据订单总额扣减当前
用户1910585
2018-07-04
5680
DDD实战进阶第一波(九):开发一般业务的大健康行业直销系统(实现经销商上下文仓储与领域逻辑)
上篇文章主要讲述了经销商上下文的需求与POCO对象,这篇文章主要讲述该界限上下文的仓储与领域逻辑的实现。 关于界限上下文与EF Core数据访问上下文参考产品上下文相应的实现,这里不再累述。 因为在经销商上下文中有两个聚合,一个是经销商聚合,一个是登录聚合,所以我们需要实现两个仓储接口: 1.经销商仓储接口定义: public interface IDealerRepository { void CreateDealer<T>(T dealer) where T : class,
用户1910585
2018-07-04
4100
DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)
前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调 领域逻辑与仓储持久化。 首先大家需要明确的是,产品上下文的领域逻辑是系统的核心,它不应该依赖仓储,而仓储应该要依赖领域层,这样仓储才可以把领域逻辑执行完后,才可能将 领域对象持久化到数据库中,这一点与传统的架构有本质的区别。 一般我们会在解决方案中建立一个项目,这个项目就是包含了所有聚合的仓储实现,具体不同上下文的仓储实现,可以在这个项目下建立不同的文件夹。 1.产
用户1910585
2018-07-04
7170
领域驱动设计之实体、值对象、领域服务
建立领域模型的第一步就是需要识别出实体、值对象与领域服务。 一.实体 1.实体是领域中需要唯一标识的领域概念。通常在业务中,需要唯一标识与区分的对象并需要持续对它进行跟踪,这样的对象我们认为是实体。这里的唯一标识通常指的是业务上的唯一标识,比如订单号、雇员工号等信息,而不是数据库中因为技术需要存储的自增int id或Guid列。 2.如果两个实体所有状态都一样,但如果标识不一样,就是两个不同实体。比如订单对象就应该是实体,就算两个订单的订单日期、订单总额等信息都一样,只要标识不一样,比如订单号,我们就认为它
用户1910585
2018-05-11
3.2K0
领域驱动设计-软件挑战与应对
通常我们在进行大型软件开发和互联网产品研发过程中,会遇到很多的挑战与问题: 1.未使用通用语言分析需求 我们通常拿到客户的需求后,会分析这个需求,在分析需求的过程中,我们通常与客户和产品经理用不同的语言在描述需求。 比如产品经理会有产品需求说明书或原型跟我们谈,我们自己在脑海中会不自觉地有一些技术素语与他们交谈,这样会造成没有重点关注业务问题,双方说不到一块。 2.架构缺乏的代码大泥球 我们开发出来的产品架构混乱,业务逻辑代码、数据库访问代码等分布在系统的各个角落,后期维护困难,而且定位BUG也绝非易事。
用户1910585
2018-05-11
5390
领域驱动设计案例之领域层实体与聚合根实现
在领域层中,可以实现实体与聚合根的业务逻辑,在实现业务逻辑之前,我们首先要确定实体和聚合根的一些基本行为,比如判断实体是否相等。关于领域对象的具体业务逻辑实现,因为涉及到要与数据库交互,所以等看完仓储的实现后,再实现领域对象的业务逻辑。 using System; using Order.Domain.Aggreate; namespace Order.Domain.Model { public abstract class Entity : IEntity { priva
用户1910585
2018-05-11
1.7K0
领域驱动设计-基本概念
我们略过需求的采集、直接进入需求分析与设计。 领域驱动设计(DDD)是近10年流行、比较成熟、比较成功的软件分析与设计方法、理论。我们早期常见的软件开发方式是拿到产品需求后,直接考虑数据库中表应该如何设计,这种方式已经将分析、设计与业务需求脱节,而更多的是直接考虑应该如何实现了,这有点本末倒置。而DDD是从领域(问题域)为出发点进行的设计方法。 这里先说一下领域驱动设计的概念:系统设计应该是一种以领域为核心的设计和开发理念。设计应该通过维护一个深度反应领域概念的模型,以及提供可行的经过实践检验的大量模式来应
用户1910585
2018-05-11
7500
领域驱动设计之体系架构模式交互过程与最佳实践
上一文主要讲了DDD体系架构以及每一层主要的作用,这篇主要描述各层之间如何进行交互,以及交互的最佳实现方式。 1.应用层某个应用层服务被界面层调用,开始启动。 2.对于需要新增领域对象的情况,应用层调用领域层中某个领域对象(聚合根)的构造函数或工厂创建出领域对象,然后调用领域对象的某些方法进行相关的业务操作,操作完成后,应用层服务将新创建的领域对象添加到仓储中。 3.对于需要修改领域对象的情况,应用层服务通过仓储获取领域对象,然后调用领域对象的某些方法进行相关的业务操作,操作完成后,应用层服务将新修改的领域
用户1910585
2018-05-11
1.1K0
领域驱动设计之体系架构模式
我们传统的体系架构模式是三层架构: 我认为传统的三层架构主要存在以下问题: 1.业务层直接访问数据访问层,也就是业务层直接与数据打交道,与数据实现机制绑定太紧。 2.数据访问层的地位太突出,而且没有体
用户1910585
2018-05-11
6990
DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)
上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码。 这里需要说明的是,DDD轻量级框架能够体现DDD的思想即可,没必要做得很重,你也可以根据理解,自己实现支持DDD的框架。 1.实体、聚合根与值对象的顶层体现 实体顶层定义: public interface IEntity { string Code { get; set; } Guid Id { get; set;
用户1910585
2018-05-04
1.2K0
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档