展开

关键词

ddd

dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd...

33300

如何用 DDDDDD 建模,破解 DDD 的魔法?

回到标题上,我们用 DDDDDD 进行建模,只是我们想到的解决方案之一,而不是问题。先再回到上面的问题上, DDD 要解决什么问题 —— 如何将复杂问题控制到人能处理的范围? 而我们想做的是:如何实现 DDD 设计与代码实现的双向绑定?于是乎,DSL 与双向图形化便是我们想到的解。所以,作为解决方案的第一步,那便是对 DDD 进行建模,以进行 DDD 的图形生成。 统一 DDD 的统一语言 尽管,我司(Thoughtworks)会在各类的 DDD 工作坊中强调,统一语言的重要性。 于是乎,这里,我们采用 DDD 社区给出了一个详细的《DDD 概念参考》,作为我们构建 DDD 的统一语言的基础。 与得到一个有用的结果相比,在过程中对于 DDD 的抽象,构建 DDDDDD 模型,显得更有意思。

6220
  • 广告
    关闭

    【玩转 Cloud Studio】有奖调研征文,千元豪礼等你拿!

    想听听你玩转的独门秘籍,更有机械键盘、鹅厂公仔、CODING 定制公仔等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    DDD开篇

    从知道DDD到现在已经很多年了,看了不少理论知识,在项目中也使用了DDD,碰到些问题,也有些思考,整理一下,上升一下,形成一种适合自身的方法论 在回顾过程中,首先追根溯源,什么是DDD? 为什么要使用DDD? 如何给别人阐述这些最基本的概念与理念,真是个难题 什么是DDD DDD已经发展了很多年,现在的一些书也已经不太关注这个基本概念, 平时闲聊时,开口闭口都是DDD,已经不知道DDD的本体是什么,只是听得耳熟 ,说得顺口了,细细回想下,DDD是个什么? 模型是团队在组织领域知识和辨别最感兴趣的原理时一致同意的方式 方法论 由上文可知DDD是一种开发方法,那在DDD之前,是怎么进行软件分析设计的呢?

    28320

    DDD入门

    image 2.DDD入门 我们先来看一张图: 从最外层开始——什么是领域?大白话来说就是一系列问题的聚合。 2.3 实体与值对象 在 DDD 中有这样一类对象,它们拥有唯一标识符,且标识符在历经各种状态变更后仍能保持一致。 DDD上手 3.1 从三层模型到DDD 这里先简单介绍一下三层模型到DDD对应的一个变化。 可以的看得出来,主要是对service进行了拆分。 3.3 实践:设计一个MiniStack 为了便于大家理解,我在这里会设计一个很简单的Iaas平台,并在里面代入最基本的DDD概念。 宏观上,我们可以参考以下分层模型: 4.小结 本文和大家一起捋了一遍DDD,并在文里“凭空的”设计了一个项目。

    18220

    走近DDD

    为什么需要DDD? 那么DDD怎么解决这些问题? DDD是什么呢? 那么怎么做DDD呢? 进度加速和项目管理工具 常见的DDD误区 后记 ---- 《领域驱动设计精粹》这本书是DDD的发明者Evans在提出DDD多年后写的一本小册子,是为了降低DDD上手难度而写的一本小册子,它很棒地阐述了 为什么需要DDD? 没有实施DDD的情况下,我们经常会遇到什么问题? 开发人员热衷于技术而不是深入了解业务。 常见的DDD误区 DDD一定要用微服务?不,其实多个域在同一个进程也没问题,只要满足一个聚合在一个事务内保护就没有问题。 DDD的架构是稳定的?这么问的人一定没有理解什么叫做领域驱动。

    10720

    DDD分层

    引起技术实现发生变化的原因与引起领域逻辑发生变化的原因显然不同,这就导致基础设施和领域逻辑问题会以不同速率发生变化 每一层都有各自的职责,显然这也是符合SRP的 如何分层 DDD的标准形态 ? 这样有些另类,所以暂时先把repository全部放在了service层 迷思: 1、基于mybatis的实现,mapper本身是接口,repository实现类放在domain层,不要接口,这样满足DDD 分层规则,但离DIP差了一步 2、在《DDD之熵》中提过 DDD引入repository放在了领域层,一是对应聚合根的概念,二是抽象了数据库访问,,但DDD限界上下文可能不仅限于访问数据库,还可能访问同样属于外部设备的文件 有几种设计思路 ui层完全归属于大前端,不在后端,也就不在ddd中,后端都是从application service开始 controller归于ui controller归于infra,controller 防腐层(ACL)放在下游,将上游的消息转化为下游的领域模型 结合generator-assist-dao模块的问题,是否可以扩大ACL,而不仅限于gateway中,像资源库一样,不必完全遵循DDD只抽象

    76720

    DDD这样落地

    本想搞场chat,可失败了,那就失败吧,也许现在DDD的热度凉了,眼球都到低代码了,对于低代码,我现在只有使用权,还没有发言权,也许明年能写写 DDD意义 每种理论的诞生都是站在前人的基础之上,总得要解决一些痛点 ;DDD自己标榜的是解决复杂软件系统,对于复杂怎么理解,至少在DDD本身理论中并没有给出定义,所以是否需要使用DDD并没有规定,事务脚本式编程也有用武之地,DDD也不是放之四海皆准,也就是常说的没有银弹 在这张方法融合论里面,DDD只是一小块,为什么要心中充满DDD呢,不都是进阶路上的垫脚石。 任何事物都是过犹不及,如文章开头所述,没有银弹,千万别因为DDD的火热而一股脑全身心投入DDD,不管场景是否适合,都要DDD;犹如设计模式,后面出现了大量的反模式。 错误的抽象比没有抽象伤害力更大 DDD分层 ?

    69561

    DDD开篇总结

    之前写了两篇《DDD开篇》[1]与《DDD应对复杂》[2],是时候总结一下了 对于DDD的启蒙,不管是国内还是国外思维逻辑都是一样的。 或者说如果你想写本关于DDD的书,大纲似乎是一样的 首先DDD是什么? 在DDD这个系列中,我也打算是这种思路,很平易近人 经过了之前两篇,对于第一部分的DDD是什么? 为什么需要DDD基本都问答清楚了。 也正是DDD难掌握的地方) 为什么需要DDD 之前介绍过软件复杂度以及应对复杂度之道,DDD是其中一种术 1.使领域专家和开发者在一起工作,这样开发出来的软件能够准确地传送业务规则2.

    26430

    再议DDD分层

    之前整理过《DDD分层》[1] 以及《分层架构》[2] 最近看网友讨论,整理一些有亮点的地方 现在分层架构+整洁架构似乎是个万金油组合了 之前DDD的标准分层结构: ? 眼尖的人可以看出来,两者确实差了不少 线条1:application到infrastructure被反转了 线条2:这条线没有了,在MVC里面这线是常见的,applicaton与domain没分开,但DDD 这图来源于阿里大牛殷浩之手,《阿里DDD四弹》[3]中进行过总结,DTOAssembler放在了application层,有些不太合理 在《分层架构》中thrift的TService,为了不与controller References [1] 《DDD分层》: http://www.zhuxingsheng.com/blog/ddd-layering.html [2] 《分层架构》: http://www.zhuxingsheng.com /blog/layered-architecture.html [3] 《阿里DDD四弹》: http://www.zhuxingsheng.com/blog/ali-ddd-four-bombs-to-read.html

    44921

    DDD实现之路

    ---- DDD之战略设计 需要指出的是,DDD绝非一套单纯的技术工具集,但是我所看到的很多程序员却的确是这么认为的,并且也是怀揣着这样的想法来使用DDD的。 过于拘泥于技术上的实现将导致DDD-Lite。简单来讲,DDD-Lite将导致劣质的领域对象,因为我们忽略了DDD战略建模所带来的好处。 这不是DDD的做法,DDD有限界上下文将这两个不同的概念区分开来。 ---- 总结 DDD存在战略设计和战术设计之分,过度地强调DDD的技术性将使我们错过由战略设计带来的好处。因此,在实现DDD时,我们应该将战略设计也放在一个重要的位置加以对待。 DDD的战术设计则更加侧重于技术实现,它向我们提供了一整套技术工具集,包括实体、值对象、领域服务和资源库等。虽然DDD的概念已经提出近10年了,但是在如何实现DDD上,我们依然有很长的路要走。

    18920

    谈一谈 DDD

    DDD将项目的主要焦点放在核心领域和领域逻辑上。基于一个模型进行复杂的设计,在技术和领域专家之间发起创造性的协作,迭代地切割问题的概念性核心。 DDD是面向对象的设计思想,是面向对象设计的一种升华。 DDD 核心思想是通过领域驱动设计方法定义领域模型,从而确定业务和应用边界,保证业务模型与代码模型的一致性。 但 DDD 提出后在软件开发领域一直都是“雷声大,雨点小”! 2.4 实施DDD所面临的挑战 为创建通用语言腾出时间和精力 持续地将领域专家引入项目 改变开发者对领域的思考方式 三、如何DDD 3.1 战略设计与战术设计 DDD的实施分战略设计与战术设计。 3.2 DDD领域模型 DDD的研究方式与自然科学的研究方法类似,下面以研究一棵树的过程举例 第一步:确定研究对象,即研究领域,这里是一棵桃树。 桃树的知识体系是我们已经确定要研究的问题域,对应 DDD 的领域。根、茎、叶、花、果实和种子等器官则是细分后的问题子域。这个过程就是 DDD 将领域细分为多个子域的过程。

    15130

    DDD之Repository

    之前的DDD文章中也指出过,现在从理论角度对于repository是错误,但一直没有摸索出最佳实践,都是当DAO使用,区别在于repository是领域层,也没有深入思考过 最近再次温习《DDD第二弹》 虽然具体的技术细节有所不同,但问题仍然存在--客户处理的是技术,而不是模型概念 在DDD思想中,领域模型是最重要的,所有的一切手段都是为了让团队专注于模型,屏蔽一切非模型的技术细节,这样也才能做到通用语言 ,交流的都是模型 VS DAO 有人总结DDD就是分与合,分是手段、合是目的;对于DDD战略来讲,就是通过分来形成各个上下文界限,在各个上下文中,再去合,很类似归并算法 而聚合就是最小的合,repository 有个很简单的办法区分,业务规则是有if/else的,业务流程没有 作者这样回答,我还是觉得太抽象了,在domain service拿数据太常见,还在看DDD第四讲时,作者有个示例是用domain service 对任何工具的使用都需要多方位权衡 《DDD第二弹》中也提到 业界有两个主流的变更追踪方案:这两个方案只是上面两种方案另取的两外名字而已,意思是一样的 基于Snapshot的方案:当数据从DB里取出来后,

    3.5K10

    DDD之Repository

    之前的DDD文章中也指出过,现在从理论角度对于repository是错误,但一直没有摸索出最佳实践,都是当DAO使用,区别在于repository是领域层,也没有深入思考过 最近再次温习《DDD第二弹》 虽然具体的技术细节有所不同,但问题仍然存在--客户处理的是技术,而不是模型概念 在DDD思想中,领域模型是最重要的,所有的一切手段都是为了让团队专注于模型,屏蔽一切非模型的技术细节,这样也才能做到通用语言 ,交流的都是模型 VS DAO 有人总结DDD就是分与合,分是手段、合是目的;对于DDD战略来讲,就是通过分来形成各个上下文界限,在各个上下文中,再去合,很类似归并算法 而聚合就是最小的合,repository 有个很简单的办法区分,业务规则是有if/else的,业务流程没有 作者这样回答,我还是觉得太抽象了,在domain service拿数据太常见,还在看DDD第四讲时,作者有个示例是用domain service 对任何工具的使用都需要多方位权衡 《DDD第二弹》中也提到 业界有两个主流的变更追踪方案:这两个方案只是上面两种方案另取的两外名字而已,意思是一样的 1.基于Snapshot的方案:当数据从DB里取出来后

    62120

    DDD有感

    领域驱动设计 Domain-driven design,缩写DDD,是对业务的抽象,把业务模型反形成系统架构设计的一种方式。通过数据对象解决业务问题。 模型对象代码规范 Data Object:DO、数据对象,在DDD的规范里,DO应该仅仅作为数据库物理表格的映射,不能参与到业务逻辑中。 DDD结构一 分层: Application层 Domain层 Infrastructure层 User Interface为用户界面层(或表示层),负责向用户显示信息和解释用户命令。 DDD Repository代码规范 传统Data Mapper(DAO)属于“固件”,和底层实现(DB、Cache、文件系统等)强绑定,如果直接使用会导致代码“固化”。 应该避免所谓的“通用”Repository模式 DDD的开源应用项目 DDD的开源应用项目

    12950

    DDD应对复杂

    复杂Eric Evans所著副标题--Tackling Complexity in the Heart of Software,对于简单系统其实没有必要使用DDD,只有在复杂系统中,才能体现DDD的价值那么何为 DDD应对这让我回想起了“结构化思维”,逻辑+套路逻辑是一种能力,而套路是方法论,是经验。 逻辑是道,方法论是术;逻辑可以学习很多思维模型理论,但套路有路径依赖,这也是去大厂的好处,可以接触到各种大牛,直接获取他们的经验和方法DDD是如何应对这些复杂性的呢? 使用容易让人明白的套路表达出来拆解也就是引入了“领域或子域”以及“有界上下文”划分边界;再引入各种模式名词,比如聚合、实体、值对象、工厂、仓储、领域事件,让知晓这些模式的人能够一下子定位到功能对应实现的组件,随着人们逐步了解,对于理解DDD

    21730

    DDD Command模型

    经常会有A.getb().getc().d()的方法调用,有没有什么方法将调用链变短比呢,联想到操作系统是通过消息触发一系列操作,我们也可以模仿这一操作,用事件...

    74430

    DDD之熵

    DDD之形》把当前一些流行的架构给通览了一篇,那是不是万事大吉,随便挑一个形态实践就行呢? 的理论,或者说DDD带来的优势,将三层架构进行演化,把业务逻辑层再细拆分成三层:应用层、领域层和基础设施层 分离业务逻辑与技术细节 ? DDD的标准形态 ? 根据张逸老师DDD课程中的案例 ? 它的职责与属于应用层的入口端口也不同,因为应用层的应用服务是对外部请求的封装,相当于是一个业务用例的外观 DDD引入repository放在了领域层,一是对应聚合根的概念,二是抽象了数据库访问,,但DDD

    27420

    DDD之形

    DDD现在已然变成哲学,正因为是哲学,所以法无定法,到底怎么具体怎么实施,各显神通,心法固然重要,但心法有几人能真正领悟,一说就懂,一问就不会,一讨论就吵架;所以还是从外形看看,收集一些实践后的形态,由表入里 ,以形学形,慢慢品 看下面两个分层,左边是Vaughn Vernon 在《实现领域驱动设计》一书中给出了改良版的分层架构,他将基础设施层奇怪地放在了整个架构的最上面;右边就是DDD最标准的分层形态 ? 形一 这是DDD专家张逸老师形态之一,除了controller在gateway中,其它还算常态 ecommerce core Identity ValueObject Entity DomainEvent adapter 这个形态,简单入里,算是菱形对称架构的简易形,甚至可以说是菱形的初形 driving adapter + domain + driven adapter 总结 形态之多,背后的理论支撑之丰富,可见DDD

    33140

    DDD领域驱动设计实战-DDD微服务代码结构

    DDD并没有给出标准的代码模型,不同的人可能会有不同理解。 按DDD分层架构的分层职责定义,在代码模型里分别为用户接口层、应用层、领域层和基础层,建立了 interfaces、application、domain 和 infrastructure 四个一级目录。 按DDD分层架构,仓储实现本应属基础层代码,但为在微服务架构演进时,保证代码拆分和重组的便利性,把聚合仓储实现的代码放到聚合包内。 如果将核心领域逻辑代码放到应用层,你的基于DDD分层架构模型的微服务慢慢就会演变成传统MVC架构。 如果这样,那Spring Data Jdbc是不是没有严格遵守DDD

    50630

    相关产品

    • Serverless HTTP 服务

      Serverless HTTP 服务

      Serverless HTTP 基于腾讯云 API 网关平台,为互联网业务提供 0 配置、高可用、弹性扩展的对外 RESTful API 能力,支持 swagger/ openAPI 等协议。便于客户快速上线业务逻辑,通过规范的 API 支持内外系统的集成和连接。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券