欢迎光临汤雪华的博客

一个人一辈子能坚持做好一件事情就够了!坚持是一种刻意的练习,不断寻找缺点突破缺点的过程,而不是重复做某件事情。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  DDD 理论积累

摘要:UML: 聚合关系:成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。如汽车(Car)与引擎(Engine)、轮胎(Wheel)、车灯(Light)之间的关系为聚合关系,引擎、轮胎、车灯可以脱离车而存在,比如把一个引擎换到另一个汽车上也可以。 组合关系:也表示的是一种整体和部分的关系,但 阅读全文

posted @ 2019-06-24 17:48 netfocus 阅读(5620) 评论(14) 推荐(5) 编辑

摘要:我们在DDD领域建模过程中,往往会很容易忽略对关系的建模,或者可以理清两个名词之间的关系是1对1、1对多、多对多,但是不知道如何在模型中设计这些关系。尤其是在多对多的场景中,仅仅靠体现名词对象之间的关联关系来表达这种关系就会显得缺乏表现力,这个时候就可以将“关系”提炼为模型中一个显式的概念。 例如, 阅读全文

posted @ 2019-06-11 10:57 netfocus 阅读(2094) 评论(0) 推荐(2) 编辑

摘要:前言 本文想再讨论一下关于领域、业务、业务模型、解决方案、BC、领域模型、微服务这些概念的含义和关系。初衷是我发现现在DDD领域建模以及解决方案落地过程中,常常对这些概念理解不清楚或者有歧义,导致我们不知道如何运用这些概念来落地我们的软件。先通过一个图来说明一下这些概念之间的关系,如下图所示 领域、 阅读全文

posted @ 2019-06-05 15:41 netfocus 阅读(9709) 评论(17) 推荐(33) 编辑

摘要:整理一个精简的DDD领域建模基本流程,供大家在DDD领域建模实践中进行参考。 在以上过程中,还有两点也是非常重要的: 逐步积累一个统一语言(UL)的领域术语表,方便各方人员沟通; 除了领域建模外,针对每个用例场景,尝试画一下系统顺序图也很有用,系统顺序图定义了系统外部角色和系统之间在某个场景下的具体 阅读全文

posted @ 2019-05-24 11:05 netfocus 阅读(5881) 评论(4) 推荐(4) 编辑

摘要:设计文档模板: 一些其他的思考: 去除一切花俏的建模技巧,我觉得最重要的方向就是去努力分析问题和事物的本质,针对这个本质进行领域建模。这个领域建模,最主要的还是锻炼的人的事物抽象能力。10个人,建出来的领域模型都不同。本质原因就是大家对同一个问题的理解不同,对事物的本质的理解不同。虽然最终都能解决当 阅读全文

posted @ 2016-12-15 10:38 netfocus 阅读(9389) 评论(2) 推荐(12) 编辑

摘要:从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决。 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品。所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的。 再比如,我是一家互 阅读全文

posted @ 2016-06-07 01:43 netfocus 阅读(74875) 评论(53) 推荐(167) 编辑

摘要: 阅读全文

posted @ 2016-01-20 15:25 netfocus 阅读(19733) 评论(6) 推荐(15) 编辑

摘要:领域驱动设计(DDD)是一种基于模型驱动的软件设计方式。它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题。Eric Ivans为领域驱动设计提出了大量的最佳实践和经验技巧。只有对领域的不断深入认识,才能得到一个解决领域核心问题的领域模型。如果一个应用的复杂性不... 阅读全文

posted @ 2015-05-10 16:58 netfocus 阅读(21326) 评论(53) 推荐(36) 编辑

摘要:本文出处:http://www.cqrs.nu/FaqWhat is a domain?The field for which a system is built. Airport management, insurance sales, coffee shops, orbital flight, ... 阅读全文

posted @ 2014-06-20 10:23 netfocus 阅读(3768) 评论(5) 推荐(0) 编辑

摘要:关于DDD的理论知识总结,可参考这篇文章。 DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/,该地址中包含了一篇关于介绍如何有效的设计聚合的一些原则,共3个pdf文件。该文章中指出了以下几个聚合 阅读全文

posted @ 2013-09-24 00:39 netfocus 阅读(58850) 评论(84) 推荐(60) 编辑

摘要:原文地址:http://www.douban.com/note/164191021/“模型、状态和行为特征、场景”和“四象图”,建模观的命名与立象。建模原语:四象图作者:achieveidea@gmail.com命名:模型、结构特征、行为特征、场景(及其规约)。释义:模型,描述事物为一组时间函数,蕴... 阅读全文

posted @ 2013-06-27 13:09 netfocus 阅读(4412) 评论(6) 推荐(4) 编辑

摘要:是NHibernate中一个有趣的特性,即是用来映射DDD(Data-Display-Debuger)概念形式的值类型。这是一种创建比物理数据模型具有更高粒度的对象模型的方式。举例,看下表中的数据:对应的对象模型:它们十分不同,在一个单一表中包括了所有物理数据,我们想在对象模型中调整为用两个分离的类型来映射该表。这就是的用法:这个映射将会在物理数据模型和对象模型中转换。我们还可以让NHibernate对进行排序并给我们所预期的对象图。 阅读全文

posted @ 2012-09-08 21:10 netfocus 阅读(1671) 评论(0) 推荐(0) 编辑

摘要:DDD的核心是聚合。这没有问题,大家都认同。但关于DDD中的聚合方式,其实我还是有些担心,下面说说我的想法,希望大家参与讨论。其实当初第一次看到DDD中关于聚合根部分论述的时候,就感觉有些僵化。DDD中的聚合根的分析设计思路大致是这样:1、业务本质逻辑分析;2、确认聚合对象间的组成关系;3、所有的读... 阅读全文

posted @ 2012-09-08 20:50 netfocus 阅读(8902) 评论(14) 推荐(3) 编辑

摘要:1. 聚合根、实体、值对象的区别?从标识的角度:聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法;从是否只读的角度:聚合根除了唯一标识外,其他所有状态信息都理论上可变;实体是可变的;值对象是只读的;从生命周期的角度:聚合根有独立的生命周期,实体的生命周期从属于其所属的聚合,实体完全由其所属的聚合根负责管理维护;值对象无生命周期可言,因为只是一个值;2. 聚合根、实体、值对象对象之间如何建立关联?聚合根到聚合根:通过ID关联;聚合根到其内部的实体,直接对象引用;聚合根到值对象,直接对象引用;实体对其他对象的引用规则:1)能引用 阅读全文

posted @ 2012-02-12 14:22 netfocus 阅读(36923) 评论(40) 推荐(22) 编辑

摘要:数据有两个重要属性:首先数据是基于时间的,数据是表达一段时间内一个逻辑为真的事实。另外一个属性是数据本质上是不可变的,因为和时间有关,我们是不能回到过去改变数据的真实性。这两个属性就意味着:对数据你其实只有两个主要的操作:读取现有数据,并(随着时间)添加更多新的数据,CRUD(增删改查)称为CR(增读)。这样,CRUD其实没有U修改,因为修改对不可变数据是不其作用的(非常类似DDD中值对象不可变,不能修改,只能更换)。CRUD中也没有删除Delete,其实大部分删除其实是一种创建新数据,如果Bob停止跟随Mary,但是他们不能改变他曾经跟随过他的事实,删除那个他不跟随她的数据,你会增加一个数据 阅读全文

posted @ 2012-02-12 13:43 netfocus 阅读(3246) 评论(3) 推荐(2) 编辑

摘要:人类社会的一切事物都是来源于对造物主智慧的学习,人类本身是不会创造任何东西的。外国新技术并不能作为软件架构的终极准则,因为老外也是人。我认为客观世界的架构应该是软件架构的唯一准则,换而言之,上帝也是一个架构师,而这个客观世界就是他的作品。有这么完美的学习对象,为什么要舍本逐末呢?就拿领域对象的设计来说,在客观世界中,人如果要做某件事情,比如扫地这个动作,扫地难道是人自己完成的吗?其实扫地是人借助扫帚这个工具完成的。换而言之,领域对象的一些动作,也根本不属于他自己,如果你把这些动作硬要强加在领域对象身上,就肯定会出现类似领域对象中调用技术层这种别扭的问题。比如,经常有什么贫血对象,和充血对象之类 阅读全文

posted @ 2012-02-12 13:43 netfocus 阅读(3733) 评论(3) 推荐(1) 编辑

摘要:经典的DDD的告诉我们如果一个领域概念是一个跨多个聚合的动作,比如转帐,那么就应该用领域服务来实现这样的业务概念。领域服务的输入和输出参数都是聚合根,领域服务内部按照业务逻辑规定的执行顺序,按照面向过程的方式,逐个调用相关聚合根的相关方法完成整个业务操作。这种方式的优点是:1)清晰的表达和封装了业务... 阅读全文

posted @ 2012-02-12 13:42 netfocus 阅读(6187) 评论(4) 推荐(2) 编辑

摘要:A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the Ag... 阅读全文

posted @ 2011-12-03 14:21 netfocus 阅读(3385) 评论(2) 推荐(0) 编辑

摘要:创建领域对象采用构造函数或者工厂,如果用工厂时需要依赖于领域服务或仓储,则通过构造函数注入到工厂;一个聚合是由一些列相联的Entity和Value Object组成,一个聚合有一个聚合根,聚合根是Entity,整个聚合被看成是一个数据修改的单元,也就是说整个聚合内的所有对象要么同时被保存,要么都不能... 阅读全文

posted @ 2011-11-13 18:52 netfocus 阅读(9301) 评论(16) 推荐(11) 编辑

摘要:阅读本文需要有DDD,DCI的知识背景。 首先,我觉得软件是用来被用户使用的,也就是说软件是用来帮用户完成一些事情的。从下面的用例图可以很好的理解用户与软件的关系: 上图是超市里的一个营业员处理一笔销售的一个用例。从这个用例我们可以清楚的看到营业员和系统之间的一个交互。从中我们可以清晰的得出系统该做... 阅读全文

posted @ 2011-11-02 23:14 netfocus 阅读(4343) 评论(11) 推荐(4) 编辑