保存成功
订阅成功
保存失败,请重试
提交成功
张晓龙

张晓龙

架构师,DDD实践布道者
多年软件架构和开发经验,DDD China 2017~2019 演讲嘉宾,ArchSummit 2019 演讲嘉宾,Go 语言 gomonkey 和 trans-dsl 作者,爱读书、爱运动、爱编程、爱分享,对于大型软件的重构具有丰富的经验。这几年指导多个团队积极实践 XP,包括开发领域和测试领域,取得了比较好的效果。个人简书主页:https://www.jianshu.com/u/1381dc29fed9 ,个人 GitHub 主页:https://github.com/agiledragon...更多
创作文章9

DDD 分层架构的三种模式 2.0

去年,作者去年写了一篇 Chat [轻松 TDD 之旅 2.0](https://gitbook.cn/new/gitchat/activity/5d667350cca96a09360e14e0),将这几年 TDD 的一些心得和感悟反映到了简书上的文章[《轻松 TDD 之旅》](https://www.jianshu.com/p/41b48a771a35)的结构和要点中去,使得 TDD 之旅在 2.0 版本更深刻,更完备,更流畅。该 Chat 发布后,受到了很多同学的肯定和鼓励,同时作者自身也感觉收获非常大。 《DDD 分层架构的三种模式》既是作者在简书上写的一篇热门[文章](https://www.jianshu.com/p/a775836c7e25),又是作者在`领域驱动设计峰会 2017` 上的演进话题。经过这几年的沉淀,作者对 DDD 分层架构有了更深入的思考,想通过本 Chat 将新的认识和实践分享给更多的同学,从而大家一起升级到 2.0 版本。 本 Chat 的主要内容为: - 分层架构简介 - 经典分层架构 - B/S 三层架构 - DDD 四层架构 - DDD 分层:L 型架构模式 - 模式介绍(L 型四层架构) - 物理设计 - 典型案例 - DDD 分层:L 型 + DCI 架构模式 - 模式介绍(L 型五层架构,L 型六层架构) - 物理设计 - 典型案例 - DDD 分层:DIP 架构模式 - 模式介绍(六边形架构,整洁架构) - 物理设计 - 典型案例
严选领域驱动
470 订阅

当 DDD 遇上 DSL

在`领域驱动设计峰会 2019`上,作者应邀参加了 InfoQ 的架构专访。在交流过程中,作者阐述了 DDD、DSL 和 DCI 的关系,同学们可以通过学习专访文章 [DDD:架构思想的旧瓶新酒](https://www.infoq.cn/article/K6AfHfMlx6IZqKwmpXcu)来了解它们之间的关系。《当 DDD 遇上 DCI》是作者在全球架构师峰会 2019 深圳站分享的一个话题,后来发布了[一篇 Chat](https://gitbook.cn/new/gitchat/activity/5d5393ac40552e73266d04b6) 来传播。《当 DDD 遇上 DSL》可以看作是《当 DDD 遇上 DCI》的姊妹篇,是作者在`领域驱动设计峰会 2019`上分享的一个话题,受到了很多同学的认可和肯定。为了将该话题的核心知识点和实践经验传播给更多有意愿提升自己 DDD/DSL 建模能力的同学,作者决定写一篇 Chat 来详细阐述。 DDD(领域驱动设计) 是一种主流的软件设计方法,DSL (领域专用语言)是一种针对某一特定领域且具有受限表达性的计算机设计语言,当 DDD 遇上 DCI 会擦出什么样的火花?我们将结合典型案例一起探讨,共同成长,从而有效降低开发成本。命令/查询式 API 是一种常见的领域模型的组装方式,但在复杂场景下,内部或外部 DSL 是一种更好的选择。DSL 可以看作是在领域模型之上的一层外壳,能显著增强领域模型的能力。DSL 既可以提升开发人员的生产力,又可以增进开发人员与领域专家的沟通。 本场 Chat 的主要内容为: 1. DSL 简介 - 命令式与声明式 - DSL 是什么 - DSL 的价值 - DSL 的分类 2. DDD 与 DSL 融合 - 面向领域 - 模型组装的方式 - 分层架构 3. 三个典型案例 - 内部 DSL 案例:gomonkey API - 外部 DSL 案例:流程契约 - 横切面 DSL 案例:事务模型
严选领域驱动设计
273 订阅

GoMonkey1.0 框架设计与应用实践

GoMonkey 是作者为 Go 语言开发的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发。GoMonkey 接口友好,功能强大,目前已被很多项目使用,用户遍及世界多个国家。 GoMonkey 的特性列表: - 支持为一个函数打一个桩 - 支持为一个成员方法打一个桩 - 支持为一个全局变量打一个桩 - 支持为一个函数变量打一个桩 - 支持为一个接口打一个桩 - 支持为一个函数打一个特定的桩序列 - 支持为一个成员方法打一个特定的桩序列 - 支持为一个函数变量打一个特定的桩序列 - 支持为一个接口打一个特定的桩序列 GoMonkey 初步计划了 2 个大版本: - GoMonkey1.0 提供丰富的命令式 API,可以满足用户各种场景的基本打桩诉求 - GoMonkey2.0 提供强大的 DSL,增强打桩功能,同时提升易用性 GoMonkey1.0 在 Github 发布一年后,已获得 200 多个 star,同时即将启动 GoMonkey2.0 的开发。在这个承上启下的阶段,作者想写一篇 Chat 来系统梳理 GoMonkey1.0 框架设计与应用实践。 本 Chat 的主要内容包括: - GoMonkey 介绍 - GoMonkey 是什么 - GoMonkey 与其他打桩框架的比较 - GoMonkey 与 GoMock 的比较 - GoMonkey 与 GoStub 的比较 - GoMonkey 与 Monkey 的比较 - 框架设计 - API 设计 - 领域模型 - 跨平台 - 注意事项 - 应用实践 - 为一个函数打一个桩 - 为一个成员方法打一个桩 - 为一个全局变量打一个桩 - 为一个函数变量打一个桩 - 为一个接口打一个桩 - 为一个函数打一个特定的桩序列 - 为一个成员方法打一个特定的桩序列 - 为一个函数变量打一个特定的桩序列 - 为一个接口打一个特定的桩序列
严选Go
135 订阅

轻松 TDD 之旅 2.0

3 年前,作者在简书上写了一篇文章[《轻松 TDD 之旅》](https://www.jianshu.com/p/41b48a771a35),当时获得了很多同学的认可。今天,回头看这边文章,却发现有很多地方值得改进。趁这次 `GitChat 有奖征文:我的技术实践`,作者决定将这几年 TDD 的一些心得和感悟也反映到文章的结构和要点中去,使得 TDD 之旅在 2.0 版本更深刻,更完备,更流畅。 本 Chat 的主要内容为: - TDD 简介 - TDD 是什么 - TDD 的过程 - 关键点 - TDD进阶 - 六字真言:红色,绿色,蓝色 - 六子真言介绍:重点阐述什么是蓝色 - 如何变色:重点是小步安全流畅的从绿色变成蓝色 - 如何取舍:确定一个清晰的标尺 - to do list 拆分 - 自顶向下:实例化 - 自底向上:实例化 - TDD 实战 本文已参加 GitChat「我的技术实践」有奖征文活动,活动链接:[ GitChat「我的技术实践」有奖征文活动](https://gitbook.cn/gitchat/activity/5d5e3d9d877aaf2c49e5c87e)
严选
304 订阅

当 DDD 遇上 DCI

《当 DDD 遇上 DCI》是笔者在全球架构师峰会 2019 深圳站分享的一个话题,受到了很多学员的认可和肯定。为了将该话题的核心知识点和实践经验传播给更多有意愿提升自己 DDD 建模能力的同学,笔者决定写一篇 Chat 来详细阐述。 DDD 是一种主流的软件设计和开发的方法,DCI 是一种软件架构模式,当 DDD 遇上 DCI 会发生什么样的故事呢?我们将结合典型案例一起探讨,共同成长,从而有效降低开发成本。 本场 Chat 的主要内容为: 1. 深入浅出 DCI 架构模式 2. 从业务方面,DCI 如何助力 DDD 战术设计 3. 从实现方面,DCI 如何助力 DDD 代码实现 4. 通过一个典型的 DDD/DCI 实践案例,将各部分知识点串起来 5. C++/Go/Python 版案例代码关键点对比 6. 核心知识点提炼
严选
337 订阅

实战 C++ 组合式设计之 DCI

在上一场 Chat [《实战组合式设计》](https://gitbook.cn/m/mazi/activity/5bc2ab0b54567e7a469a1018)中,我们通过正则表达式引擎的案例,完整呈现了通过抽象和依赖注入的方式实现组合式设计。 在本场 Chat 中,我们以 DCI(Data、Context 和 Interactive 三层架构)为基础,将清晰呈现通过 C++ 多重继承的方式实现组合式设计的全貌。读者掌握这一技能后,就可以设计出单一职责的类(角色)。领域对象的职责仅仅是通过多重继承的方式来组合各个角色的职责。在业务的处理过程中,领域对象根据场景来扮演相关的角色来完成一个任务。 本场 Chat 的主要内容为: - 需求; - DCI 架构模式; - 组合式设计之 DCI; - 核心代码分享; - 物理依赖隔离。
严选C++DCI实战
172 订阅

实战组合式设计

不使用编程语言的正则表达式库,实现一个基于特定语义规则的正则表达式引擎,对用户提供基本的 match 和 search 接口。这里有两个难点,一个是语义规则如何嵌套,另一个是贪心算法在嵌套的语义规则中如何收敛。 如果你想使用既有语言库中的算法实现这个正则表达式引擎,复杂度会超过你的想象。我们应该跳出既有思维的墙,深入分析问题域,简单自洽地解决设计挑战,有效地控制软件的复杂度。 本场 Chat 的主要内容为: 1. 需求 2. 组合式设计简介 3. 抽象设计 4. 贪心算法设计 5. API 设计 6. 测试设计 7. 内存管理设计 8. 核心代码分享 注:示例代码的语言为 C++,文章后面附完整代码的链接。
严选实战组合式设计
324 订阅

基于 FP 的一次 DDD 战术设计实践

在 DDD(领域驱动设计) 中,Eric Evans 认为领域模型是 DDD 的核心,软件开发中的所有参与者都应该围绕着一个统一一致的领域模型而工作,使得软件的复杂性得以有效控制。 领域模型是从领域问题出发人为构建的一种面向领域的指示性语义,选择某种编程范式就选定了特定的构建基础。理论上不管选择 OP(面向过程)、OO(面向对象)还是 FP(函数式)做为构建基础都是图灵完备的,但在工程上需要考量哪种编程范式与领域语义之间的 Gap 最小且维护成本最低。另外现代编程语言基本都支持多范式,使得程序员可以在局部灵活选择最佳的编程范式。 人们已经在基于 OO 的领域建模方面积累了大量的经验,而在基于 FP 的领域建模方面的经验却比较匮乏。本场 Chat 主要分享基于 FP 的一次 DDD 战术设计实践,主要内容包括: 1. 基于 FP 进行领域建模的场景; 2. 针对案例的第一个游戏建立领域建模,并通过代码表达; 3. 针对案例的第二个游戏演进领域模型,并通过代码表达。 附:[Counting-Shapes 代码](https://github.com/agiledragon/ddd-sample-in-golang)
严选DDDFP
675 订阅

DDD 在微服务物理设计中的应用

DDD(Domain Driven Design)作为一种软件开发方法,它可以帮助我们设计高质量的软件模型。在正确实现的情况下,我们通过 DDD 完成的设计恰恰就是软件的工作方式。 微服务近年来可谓炙手可热,合理的使用微服务架构可以解耦系统,提供更好的软件伸缩性以及提高组织的敏捷性,然而微服务架构从一出来就没有很好的理论支撑如何合理的划分服务边界,人们常常为服务要划分多大而争吵不休。而 DDD 被发现恰好可以弥补微服务的营养不良:通过战略设计可以确定子域并在子域内划分 BC(Bounded Context),一个微服务一般对应一个 BC,同时 BC 内成熟的分层架构和战术设计可以应用在微服务上。 很多团队在微服务内实践 DDD 时,经常会为如何分包而纠结来纠结去,折腾了很长时间也很难满意,同时不同团队,甚至同一团队的不同开发人员的分包原则和方式也大不相同,非常不利于产品代码的开发和维护。我们说的物理设计,主要就是目录和文件设计,可以很好的解决分包问题。 本场 Chat 首先回顾了DDD的基本知识,并将微服务与DDD关联在一起,然后介绍了DDD四层架构模式,为阐述微服务的物理设计打好了必要的基础,接着详细阐述了DDD在微服务物理设计中的应用,并输出了微服务物理设计的推荐方案,以及物理设计经过DCI(Data,Context and Interactive)架构模式、Domain Event建模元素和DIP(Dependency Inversion Principle, DIP)原则驱动后的演进方案,最后列出了作者精心准备的放在github上的多个代码案例,从而有效降低落地难度。希望读者吃透本场 Chat 的知识点,举一反三,灵活应用DDD做好微服务的物理设计,并参考案例代码将其真正落地。 本场 Chat 你将学到以下内容: 1. DDD 四层架构模式 2. 微服务物理设计方案 3. DCI、Domain Event和DIP 驱动物理设计演进 4. 多个代码案例
微服务领域驱动设计
1041 订阅