ddd
文章平均质量分 92
追兔子的乌龟
这个作者很懒,什么都没留下…
展开
-
[全文]DDD话语批评之一:评张逸的“状态和事件本质相同”
原创潘加宇UMLChina9月22日收录于话题#建模带来竞争优势35个内容#分析&设计(领域建模&领域驱动设计)55个内容有位同学给我发了张逸著的《解构领域驱动设计》中的一页,让我评点一下。图1 摘自《解构领域驱动设计》(张逸,2021)书中“状态和事件本质上是相同的”的观点真是令我“耳目一新”。那就针对这页书的内容来讲讲吧。我先介绍状态机的一些知识点,然后根据这些知识点来评价一下这页书中的内容。一、状态是描述某个类的“形容词”状态的名称和类的名...转载 2021-11-08 10:51:12 · 293 阅读 · 0 评论 -
阿里技术专家详解 DDD 系列- Domain Primitive
殷浩淘系技术2019-09-02收录于话题#后端技术分享35个内容作者|殷浩出品|阿里巴巴新零售淘系技术部导读:对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integration Patterns ,都是通过一系列的设计模式或范例来降低一些常见的复...转载 2021-10-13 15:57:17 · 262 阅读 · 0 评论 -
阿里技术专家详解DDD系列 第二弹 - 应用架构
殷浩淘系技术2019-09-24收录于话题#后端技术分享35个内容作者|殷浩出品|阿里巴巴新零售淘系技术部架构这个词源于英文里的“Architecture“,源头是土木工程里的“建筑”和“结构”,而架构里的”架“同时又包含了”架子“(scaffolding)的含义,意指能快速搭建起来的固定结构。而今天的应用架构,意指软件系统中固定不变的代码结构、设计模式、规范和组件间的通信方式。在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全、稳定、快速迭代。在一个团队内通...转载 2021-10-13 15:55:41 · 458 阅读 · 0 评论 -
阿里技术专家详解DDD系列 第三讲 - Repository模式
殷浩淘系技术2020-05-15收录于话题#后端技术分享35个内容作者|殷浩出品|阿里巴巴新零售淘系技术部写在前面:这篇文章和《阿里技术专家详解DDD系列 第二弹 - 应用架构》隔了比较久,一方面是工作比较忙,另一方面是在讲Repository之前其实应该先讲Entity(实体)、Aggregate Root(聚合根)、BoundedContext(限界上下文)等概念。但在实际写的过程中,发现单纯讲Entity相关的东西会比较抽象,很难落地。所以本文被推倒重来,...转载 2021-10-13 15:54:43 · 1025 阅读 · 0 评论 -
DDD系列第四讲:领域层设计规范
殷浩淘系技术2020-12-28收录于话题#后端技术分享35个内容在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Entity、ValueObject 还是 DomainService是值得用心思考的,既要避免未来的扩展性差,又要确保不会过度设计导致复杂性。今天我用一个相对轻松易懂的领域做一个案例演示,但在实际业务应用中,无论是交易、营销还是互动,...转载 2021-10-13 15:53:36 · 708 阅读 · 0 评论 -
DDD系列第五讲:聊聊如何避免写流水账代码
原创殷浩淘系技术4月20日收录于话题#后端技术分享35个内容向读者们道歉,由于工作太忙,又对文章质量有追求,所以这篇文章产出速度较慢,但可以向大家保证:文章中的内容都经过了反复实践和踩坑。DDD系列的前几篇文章可以点击文字下方阅读~DDD系列第一讲DDD系列第二讲DDD系列第三讲DDD系列第四讲在过去一年里我们团队做了大量的老系统重构和迁移,其中有大量的代码属于流水账代码,通常能看到是开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,...转载 2021-10-13 15:52:09 · 486 阅读 · 0 评论 -
移动应用遗留系统重构(7)- 解耦重构演示篇(一)
看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因写在前面首先感谢大家阅读本篇文章,通过阅读本篇文章你将了解到: 线程池的定义 Executors创建线程池的几种方式 ThreadPoolExecutor对象 线程池执行任务逻辑和线程池参数的关系 Executors创建返回ThreadPoolExecutor对象 OOM异常测试 .转载 2021-05-24 16:53:39 · 138 阅读 · 0 评论 -
移动应用遗留系统重构(6)- 测试篇
原创DTO咨询师黄俊彬ThoughtWorks CAC 敏捷教练今天前言上一篇移动应用遗留系统重构(5)- 重构方法篇我们分享了进行依赖解除的重构流程。主要为4个操作步骤,识别内聚包、解除依赖、移动、验收。同时最后也提出了一个问题,重构时如何保证功能的正确性,不会修改出新问题?其实这个问题容易但又不简单。容易的是把修改得功能仔细测一篇保证所有功能正常就可以了。不简单的是如何全面、高效、可重复的执行这个过程。我们很容易联想到的方案就是自动化测试。但最大的问题是,对大部分遗留系统来...转载 2021-05-08 09:09:34 · 169 阅读 · 0 评论 -
移动应用遗留系统重构(5)- 重构方法篇
原创DTO咨询师黄俊彬ThoughtWorks CAC 敏捷教练4月23日前言上一篇移动应用遗留系统重构(4)- 分析篇我们根据CloudDisk未来的架构,借助ArchUnit进行架构测试守护以及Intellij的Dependendencies分析出了按照未来的架构设计需要解决的异常依赖。这一篇开始我们将分享进行依赖解除的重构流程、方法以及常用的工具使用。重构流程1.识别内聚的包对于移动应用通常我们可以通过产品的业务划分进行领域的识别划分。例...转载 2021-05-08 09:09:00 · 148 阅读 · 0 评论 -
移动应用遗留系统重构(4)- 分析篇
原创DTO咨询师黄俊彬ThoughtWorks CAC 敏捷教练4月17日前言上一篇移动应用遗留系统重构(3)-示例篇我们介绍了CloudDisk的业务及代码现状。分享了“理想”(未来的架构设计)与“现实”(目前的代码现状),接下来在我们开始动手进行重构时,我们首先得知道往理想的设计架构演化,中间存在多少问题。一方面作为开始重构的输入,另外一方面我们有数据指标,也能更好评估工作量及衡量进度。接下来我们将根据架构篇团队采用的架构设计,结合目前的代码,总结分析工具及方法。架构设计我们先...转载 2021-05-08 09:08:18 · 89 阅读 · 0 评论 -
移动应用遗留系统重构(1)- 开篇
黄俊彬CAC敏捷教练3月26日前言2008年9月22日,谷歌正式对外发布第一款Android手机。苹果公司最早于2007年1月9日的MacWorld大会上公布IOS系统。移动应用领域的发展已经超过10年。在App Annie 最新的移动市场报告中分享2020应用下载量已经达到2180亿次,同比增加7%。根据Statista的统计,2020年度Google Play的应用数量为3148932个。在移动互联网的高速发展及竞争中,更快及更高质量的交付用户,显然尤为重要。但很多产品随着移动互联网的发..转载 2021-04-13 08:46:36 · 438 阅读 · 0 评论 -
移动应用遗留系统重构(2)- 架构篇
原创DTO咨询师黄俊彬CAC敏捷教练1周前前言上一篇移动应用遗留系统重构(1)- 开篇我们分享了移动应用遗留系统常见的问题。那么好的实践或者架构设计是怎样的呢?这一篇我们将整理业内优秀的移动应用架构设计,包含微信、淘宝、支付宝以及美团外卖。其中的部分产品也经历过遗留系统的重构改造,具有非常好的参考意义。优秀实践微信从微信对外分享的架构演进文章中可知,微信应用其实也是经历了从大单体到模块化的演进。图片来源微信Android模块化架构重...转载 2021-04-13 08:45:59 · 148 阅读 · 0 评论 -
移动应用遗留系统重构(3)- 示例篇
前言上一篇移动应用遗留系统重构(2)- 架构篇,我们介绍了业内的优秀架构实践以及CloudDisk团队根据业务情况设计的分层架构。这一篇我们将介绍一个浓缩版的示例,示例中我们设计了一些常见的异常依赖,后续的重构篇我们也将基于这个示例进行操作演示。为了简化代码及对业务上下文的理解,示例中的部分实现都是空实现,重点体现异常的耦合依赖。仓库地址:CloudDiskCloudDisk示例项目概述CloudDisk是一个类似于Google Drive的云存储应用。该应用主要拥有3大核心业务模块转载 2021-04-13 08:45:23 · 266 阅读 · 0 评论 -
使用 DDD 指导微服务拆分的逻辑
原创少个分号ThoughtWorks洞见昨天对于服务拆分的逻辑来说,是先设计高内聚低耦合的领域模型,再实现相应的分布式系统。服务的划分有一些基本的方法和原则,通过这些方法能让微服务划分更有操作性。最终在微服务落地实施时也能按图索骥,无论是对遗留系统改造还是全新系统的架构都能游刃有余。开发者在刚开始尝试实现自己的微服务架构时,往往会产生一系列问题 : 微服务到底应该怎么划分? 一个典型的微服务到底应该有多微? 如果做了微服务设计,最后真的会有好处吗?...转载 2020-12-09 09:51:10 · 343 阅读 · 0 评论 -
如何运用领域驱动设计 - 值对象
目录概述 何为值对象 值对象是基于上下文的 当前上下文的值对象可能是另一个上下文的实体 怎么运用值对象 尽量避免使用基元类型 值对象是内聚并且可以具有行为 来看一个例子 值对象的持久化 总结概述作为领域驱动设计战术模式中最为核心的一个部分-值对象。一直是被大多数愿意尝试或者正在使用DDD的开发者提及最多的概念之一。但是在学习过程中,大家会因为受到传统开发模式的影响,往往很难去运用值对象这一概念,以及在对值对象进行持久化时感到非常的迷惑。本篇文章会从值对象的概念出.转载 2020-09-17 17:25:37 · 93 阅读 · 0 评论 -
解构领域驱动设计(二):分层架构
解构领域驱动设计(二):分层架构反映业务规则的代码是整个软件的核心,但是它一般只占很小的一部分,在传统的基于贫血模型的分层软件架构中,业务规则可能分散到各个层、各个代码段,从而使得通过代码来还原业务规则或者保证代码与业务规则一致将变得非常困难。DDD分层架构的核心思想就是将所有业务规则的代码抽取到领域层,保证领域层的编码与领域模型是完全一致的。下图是DDD的分层架构。一定要牢记:DDD分层架构一个核心任务,就是将软件最重要的资产——业务规则分离出来,抽象在领域层,并确保这些代码是领域模.转载 2020-09-15 10:08:20 · 255 阅读 · 0 评论 -
解构领域驱动设计(三):领域驱动设计
解构领域驱动设计(三):领域驱动设计在上一部分,分层架构的目的是为了将业务规则剥离出来在单独的领域层中进行实现。再回顾一下领域驱动设计的分层中应用层代码的实现。@Overridepublic void pay(int orderId, float amount) { DesignerOrder order = designerOrderRepository.selectByKey(orderId); // 领域对象的加载 if (order == null) {转载 2020-09-14 18:01:05 · 503 阅读 · 0 评论 -
解构领域驱动设计(一):为什么DDD能够解决软件复杂性
解构领域驱动设计(一):为什么DDD能够解决软件复杂性1 为什么我要研究领域驱动设计1.1 设计方法各样且代码无法反映设计我大概从2017年10月份开始研究DDD,当时在一家物流信息化的公司任职架构师,研究DDD的初衷在于为团队寻找一种软件设计的方法论。作为架构师,经常参与设计评审,包括:需求评审、设计评审、代码评审。在评审过程中,有一点感受非常深,就是评审过程非常痛苦且几乎没有效率和成果。让我痛苦的地方有:每一个系统分析师都是基于自己的方式来进行设计功能,有的用类图、有的基于流程图,有的详转载 2020-09-15 10:06:44 · 461 阅读 · 0 评论