领域驱动设计是一种设计思想,来源于 Eric Evans 的一本书 Domain-Driven Design –Tackling Complexity in the Heart of Software。它倡导通过建立领域模型来驱动软件的设计,也就是从业务知识出发设计业务人员和技术人员都能理解的模型。 统一语言是领域驱动设计的关键概念之一。领域建模的核心难点就在于业务人员和 […]
领域驱动设计是一种设计思想,来源于 Eric Evans 的一本书 Domain-Driven Design –Tackling Complexity in the Heart of Software。它倡导通过建立领域模型来驱动软件的设计,也就是从业务知识出发设计业务人员和技术人员都能理解的模型。 统一语言是领域驱动设计的关键概念之一。领域建模的核心难点就在于业务人员和 […]
本视频探索了事件溯源这一强大概念。通过事件溯源,系统不再只存储当前状态,而是记录每个状态变化作为事件。这允许我们能够追溯某一特定时间点的状态,并确保数据完整性。视频讲述了如何通过分析事件序列来优化审计和分析,同时解决了并发问题,确保系统的松散耦合。还介绍了乐观并发技术、状态快照、最终一致性等关键概念,以及事件溯源如何与CQRS和DDD结合使用,以实现更加高效和可靠的系统架构 […]
本视频详细讲解了微服务架构的基本概念及其与传统单体架构的对比。通过探索什么不是微服务(即传统的单体架构),视频揭示了单体架构可能导致的复杂性和维护难题。随后,介绍了模块化单体架构如何通过将大型系统划分为更小的子系统来提高代码管理性。最终,演变成微服务体系,它们作为独立的进程运行,支持独立更新、独立扩展、和更高的故障隔离。视频进一步探讨了微服务间通信、API边界的稳定性以及网 […]
在构建复杂系统时,开发者常用实体及其关系来建模,然而,随着系统的增长,这种方法容易导致系统复杂难懂。通过限定上下文,开发者可以将代码划分为不同的区域,每个区域使用特定的术语和规则,简化系统管理和维护。视频通过火车票预订系统等实例,详细解释了如何使用限定上下文来处理不同的业务需求和复杂性。它介绍了绘制上下文地图、识别子域(核心领域、支撑子域、通用子域)的方法,以及在不同上下文 […]
本视频详细介绍了领域驱动设计(DDD)的关键概念,包括统一语言、聚合根、领域事件、实体、值对象以及仓库等术语。DDD 的核心并非技术细节,而是强调软件设计的语言和结构应与业务领域对齐,从而构建出领域专家与技术人员都能理解的丰富模型。值对象(如颜色)应当是不可变且基于它们的值来比较相等性。实体(如轮胎)则通过唯一ID标识,即使属性相同也视为不同实例。领域事件表示领域中重要发生 […]
软件系统是通过软件开发来解决某一个业务领域或问题单元而产生的一个交付物。而通过软件设计可以帮助我们开发出更加健壮的软件系统。因此,软件设计是从业务领域到软件开发之间的桥梁。而DDD是软件设计中的其中一种思想,旨在提供一种大型复杂软件的设计思路和规范。通过DDD思想可以让我们的业务架构、系统架构、部署架构、数据架构、工程架构等都具备高扩展性、高维护性和高测试性。 但是落地DD […]
这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。 Eric Evans 于 2003 年出版了精采绝伦的《领域驱动设计:软件核心复杂性应对之道》,在书中他创造了领域驱动设计方法。Eric Evans […]
今天给大家分享一篇DDD领域建模实战,结合我个人三年来的DDD实践经验,以企业级电商项目DDD领域设计为出发点,希望能给到大家对DDD的一些启发。 我会从DDD领域分析、DDD设计呈现、领域建模实际案例来展开说明,后面会有彩蛋给到大家~ 讲DDD之前,咱们得了解一些基本概念,大家都知道DDD指的是领域驱动设计(Domain-Driven Design),那怎么理解DDD呢? […]
大家好,我是技术UP主小傅哥。MVC讲解了,DDD讲解了。接下来这个章节,我们讲讲从MVC到DDD的重构! MVC 旧工程腐化严重,迭代成本太高。DDD 新工程全部重构,步子扯的太大。 这是现阶段在工程体系化治理中,我们所面临的最大问题;既想运用 DDD 的思想循序渐进重构现有工程,又想不破坏原有的工程体系结构以保持新需求的承接效率。 经过实践得知,DDD 架构能解决, […]
在上一部分,分层架构的目的是为了将业务规则剥离出来在单独的领域层中进行实现。再回顾一下领域驱动设计的分层中应用层代码的实现。 @Override public void pay(int orderId, float amount) { DesignerOrder order = designerOrderRepository.selectByKey(orderId); // […]
反映业务规则的代码是整个软件的核心,但是它一般只占很小的一部分,在传统的基于贫血模型的分层软件架构中,业务规则可能分散到各个层、各个代码段,从而使得通过代码来还原业务规则或者保证代码与业务规则一致将变得非常困难。DDD分层架构的核心思想就是将所有业务规则的代码抽取到领域层,保证领域层的编码与领域模型是完全一致的。 下图是DDD的分层架构。 一定要牢记:DDD分层架构一个核心 […]
1 为什么我要研究领域驱动设计 1.1 设计方法各样且代码无法反映设计 我大概从2017年10月份开始研究DDD,当时在一家物流信息化的公司任职架构师,研究DDD的初衷在于为团队寻找一种软件设计的方法论。作为架构师,经常参与设计评审,包括:需求评审、设计评审、代码评审。在评审过程中,有一点感受非常深,就是评审过程非常痛苦且几乎没有效率和成果。让我痛苦的地方有: 每一个系统分 […]
Tech 导读 领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,旨在帮助开发人员更好地理解和解决复杂领域的问题。在DDD中,聚合根和领域事件是两个核心概念,它们在设计和实现领域模型时起到了重要的作用。本文将通过简单的举例方式,深入浅出地介绍聚合根和领域事件,帮助读者更好地理解DDD的核心思想和实践方法。希望本文能够为读者提供有价值的 […]
向读者们道歉,由于工作太忙,又对文章质量有追求,所以这篇文章产出速度较慢,但可以向大家保证:文章中的内容都经过了反复实践和踩坑。。在过去一年里我们团队做了大量的老系统重构和迁移,其中有大量的代码属于流水账代码,通常能看到是开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,导致业务逻辑实际无法收敛,接口复用性比较差。所以这讲主要想系统性的解释一下如何通过DDD的重构,将原有的流水账代码改造为逻辑清晰、职责分明的模块。
在我看来并不是MVC的基础上增加领域层,使用充血模型,解耦基础服务,我的代码就符合DDD了。 为什么要使用DDD? DDD分为战略部分跟战术部分,相信大家都认同DDD的核心在战略而非战术。而战略方面的核心我认为在业务建模,领域划分、统一语言等都在为业务建模服务。 为什么业务建模重要? 以前的开发流程有什么问题? 先说结论,开发人员交付的程序对业务方,产品人员,测 […]
CRUD (1)Event Sourcing (1)graphql (1)id (1)quarkus (1)rest (1)RocketMQ (1)Spring Boot (1)zk (1)zookeeper (1)事务消息 (1)值对象 (1)原子性 (1)唯一ID (1)子域 (1)幂等 (1)康威定律 (1)微服务架构 (1)总体方案 (1)持续集成 (1)支撑域 (1)故障恢复 (1)数据架构图 (1)方案选型 (1)日记 (1)服务发现 (1)服务治理 (1)服务注册 (2)机房 (1)核心域 (1)泄漏 (1)洋葱架构 (1)消息队列 (2)源码剖析 (1)熔断 (1)生态 (1)画图工具 (1)研发团队 (1)线程 (2)组织架构 (1)编码 (1)视频 (10)读写分离 (1)贵州 (1)软件设计 (1)迁移 (1)通用域 (1)集群化 (1)雪花算法 (1)顺序消息 (1)
COPYRIGHT © 2014-2024 verysu.com . ALL RIGHTS RESERVED.
Theme Kratos Made By Seaton Jiang