书籍作者:Vaughn | ISBN:9787121348525 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:2683 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
领域驱动设计(DDD)是时下软件设计领域中的热门话题,它通过指导我们构建领域模型,来表达丰富的软件功能需求,并由此实现可以满足用户真正需要的软件。然而在实践过程中,由于不同的角色对于DDD的核心概念和主要工具的理解不同,常常会造成协作上的不一致。为了帮助和指导面向对象的开发人员、系统分析人员和设计人员更加合理地组织工作,各有侧重、有条不紊地进行复杂系统的开发,并有效地建立丰富而实用的领域模型,《领域驱动设计精粹》的作者Vaughn Vernon将自己近年来在领域驱动设计领域的理解进一步提炼,并将本书以精粹的形式呈现给广大的读者。
《领域驱动设计精粹》的内容包括:DDD对于广大读者的意义、从战略层面进行设计、从战术层面进行设计,以及相关的辅助工具。
当然,仅仅通过此书的阅读无法深入地掌握领域驱动设计的精髓,无论你是什么经验水平或角色,请阅读本书并在项目中实践DDD。并在这之后,再重读此书,看看你从项目的经历中学到了什么。反复这样的循环,你将会获益匪浅。
Vaughn Vernon是一位经验丰富的软件工匠,也是追求简化软件设计和实现的思想领袖。他是畅销书《实现领域驱动设计》和《响应式架构:消息模式Actor实现与Scala、Akka应用集成》的作者,这些书也同样由Addison-Wesley出版发行。他在全球面向数百位开发者教授过IDDD课程,并经常在行业会议上发表演讲。他对分布式计算、消息机制,特别是Actor模型非常有兴趣。Vaughn擅长领域驱动设计和使用Scala、Akka实现DDD方面的咨询。你可以通过www.VaughnVernon.co查看他的研究成果,或者关注他的Twitter: @VaughnVernon。
译者简介
覃宇,ThoughtWorks 高级咨询师,10余年移动应用开发经验,Android 技术专家,曾为AOSP贡献过测试用例;目前专注于移动应用的架构设计、自动化测试以及持续交付。译有《Kotlin实战》《Severless:无服务架构与AWS Lambda》等书。
本书让枯燥的DDD概念栩栩如生。无论你是软件开发者、架构师、分析师、咨询师还是软件客户,本书都能助你真正地理解DDD,并从它的美好前景中获益。本书并没有用大量细枝末节的知识点来淹没你,而是聚焦于那些为了寻求答案所必需的内容。本书内容简练易懂并具备可操作性。好评如潮的《实现领域驱动设计》作者Vaughn Vernon,将二十多年来在真实项目场景中运用DDD原则的经验进行总结,没有谁比他更适合阐明这其中的庞杂和微妙之处。
Vernon将指导你掌握每一项为了构建更好的软件所必须的核心DDD技术。你将学会如何使用强大的限界上下文模式来分离领域模型、如何在明确的边界内发展通用语言,以及如何帮助领域专家和开发者紧密协作来创造这种语言。他还展示了如何借助子域来处理遗留系统,以及如何利用各种团队关系和技术机制来集成多个限界上下文。
本书内容包括:
√ DDD可以为你或者你的组织做些什么,以及它为什么如此重要
√ DDD战略设计的基石:限界上下文和通用语言
√ 使用子域进行战略设计
√ 上下文映射:帮助团队更具策略性地进行协作并集成软件
√ 使用聚合和领域事件进行战术设计
√ 使用项目加速和管理工具来建立并维护团队的节奏
序
为什么建模是一件既有趣又回报诸多的事情?从孩童时起,我就喜欢上了构建模型。那时我搭建最多的是汽车和飞机。当时我并不知道乐高玩具的存在。不过,从我的儿子很小的时候起,乐高就一直伴随着他的成长。用这些乐高积木构思和搭建模型是如此令人着迷。构建一个基础模型非常简单,几乎可以无止境地发挥想象力。
你也许也会联想到某些新潮的建筑模型。
模型在我们生活中无处不在。如果你喜欢玩桌游,你正是在使用模型。这里的模型可能是房产和业主,或是岛屿和幸存者,抑或是领地和建设活动,等等。同样,视频游戏也藏匿了多个模型。这些模型也许塑造了一个奇幻世界,那里充满了奇特的人物,他们扮演着梦幻般的角色。而扑克牌或者与之相关的游戏则是体现着竞技的模型。模型就是生活的一部分。人们总是在使用模型,虽然往往并不会承认。
为何如此?因为人人皆有各自的学习方式。虽然学习方式有很多种,但讨论最多的三种方式是听觉、视觉和触觉。听觉学习者通过声音和聆听来学习。视觉学习者通过阅读和浏览影像来学习。触觉学习者通过触摸的行为来学习。有趣的是,每个人都会热衷于某种学习方式,以至于有时会在其他学习方式上遇到麻烦。例如,触觉学习者能记住他们所做过的事情,但可能会忘记过程中所听见的内容。建模的过程主要会涉及视觉和触觉的刺激,因此你可能会认为视觉和触觉学习者比听觉学习者更具有优势。然而,事实并非总是如此,尤其当一组建模者在构建的过程中使用有声沟通时。换句话说,模型的构建过程应该适用于大多数人的学习方式。
从建模中学习的能力是人类与生俱来的,为何不利用它去构建已经给生活带来巨大帮助和影响的软件模型呢?事实上,软件模型需要人类去实现,也应该由人类去完成。我认为,人类本应该是优秀的软件模型构建者。
我强烈期望能够帮助你使用最好的建模工具来实现软件。这些工具已被打包成“领域驱动设计”工具箱,或称之为“DDD”工具箱。该工具箱实际上是一套模式,在Eric Evans所著的《领域驱动设计:软件核心复杂性应对之道》[DDD]一书中首次提出。我期望将DDD带给每一个人。如果必须表达我的观点,我想说的是,让我把DDD介绍给大家吧!DDD也本该如此,它是面向模型设计的人们用于构建卓越软件模型的工具箱。本书中,我会尽可能地简化DDD的学习和使用,并将其带给每一位读者。
对于听觉学习者而言,DDD通过团队的沟通来构建基于通用语言的开发模型,并以此创造学习的契机。对于视觉和触觉学习者来说,在团队进行战略和战术建模时使用DDD,其过程高度视觉化并非常注重实操。绘制上下文映射图 并使用事件风暴构建业务流程时尤为如此。因此,我相信DDD可以帮助到每一位期待通过模型构建来学习并且希望获得伟大成就的人。
本书所面向的读者
本书适用于对快速学习DDD核心概念和主要工具感兴趣的人。最主要的读者是软件架构师和开发者,他们将在项目中实践DDD。通常,软件开发者会很快发现DDD的美妙之处,并被其强大的工具深深地吸引。尽管如此,本书也可以帮助高管、领域专家、经理人、业务分析师、信息架构师和测试人员理解这一主题。并非只有那些从事信息技术(IT)行业和研发(R&D)行业的从业者才能从书中获益。
如果你是一位顾问,并且正在推荐你的客户使用DDD,那么请将本书提供给主要负责人,这会帮他们快速地理解DDD。如果你团队中的初级、中级甚至资深开发人员需要尽快在项目上采用DDD,但对其并不熟悉,请让他们阅读此书。本书至少可以让所有的项目负责人和开发人员熟悉DDD词汇表,并了解即将使用的主要工具,这将使他们能在项目推进过程中不断地分享一些有意义的内容。
无论你处于什么样的经验水平或担任什么样的职务,请阅读本书并在项目中实践DDD。之后再重读此书,看看你从项目中学到了什么,以及将来如何进一步改进。
本书的内容
第1章解释了DDD能为你和你所在的组织带来什么,并详尽地说明了你将学到什么,以及DDD为何如此重要。
第2章介绍了DDD的战略设计,并教授了DDD的重要概念:限界上下文与通用语言。第3章解释了子域,以及在新应用建模时如何使用子域应对新应用与现有遗留系统集成的复杂性。第4章教授了团队在战略层面上的各种协作方式,以及软件的集成方式,即所谓的上下文映射。
第5章将注意力转移到了使用聚合进行战术建模中。领域事件是一个与聚合共同使用的重要而又强大的战术建模工具,它是第6章的主题——运用领域事件进行战术设计。
最后,第7章会着重介绍一些加速设计和管理项目的工具,它们可以帮助团队建立并保持研发节奏。以上的两个话题很少在其他DDD书籍中讨论,但确实是那些决心将DDD付诸实践的人所迫切需要的。
行文惯例
请在阅读中注意几点行文惯例。所有讨论的DDD工具都会用楷体字表示。例如,你将会看到以楷体印刷的限界上下文和领域事件。另外所有的源代码将会用等宽字体印刷。本书正文章节中出现在方括号内的首字母缩写代表相关的书籍和文献,它们都列在本书末尾的参考文献中。
除此之外,本书重点强调的,也是读者最为喜欢的部分是,通过大量图表和插图进行的视觉学习方式。本书中所有插图都没有任何数字编号,这是因为我不想让太多的数字分散你的注意力。每个案例的图表和插图都会位于对其讨论的正文之前,这也意味着当你阅读本书时,这些视觉图形将首先引发你的思考 。而当阅读正文时,你也可以反过来参考之前的插图和图表。
第1章 DDD对我而言 1
DDD很难掌握吗 2
优秀设计、糟糕设计和有效设计 3
战略设计 8
战术设计 9
学习过程与知识提炼 10
让我们开始吧! 11
第2章 运用限界上下文与通用语言进行战略设计 13
领域专家和业务驱动 20
案例分析 24
战略设计是必要的根基 28
在质疑中统一 32
发展通用语言 38
应用场景 42
如何持续 45
架构 46
本章小结 50
第3章 运用子域进行战略设计 51
什么是子域 52
子域类型 53
应对复杂性 54
本章小结 56
第4章 运用上下文映射进行战略设计 57
映射的种类 60
合作关系 60
共享内核 61
客户—供应商 62
跟随者 63
防腐层 64
开放主机服务 65
已发布语言 65
各行其道 66
大泥球 67
善用上下文映射 69
基于SOAP的RPC 70
RESTful HTTP 72
消息机制 74
上下文映射示例 79
本章小结 83
第5章 运用聚合进行战术设计 85
为什么使用它 86
聚合的经验法则 91
规则一:在聚合边界内保护业务规则不变性 92
规则二:聚合要设计得小巧 93
规则三:只能通过标识符引用其他聚合 95
规则四:利用最终一致性更新其他聚合 96
建立聚合模型 99
慎重选择抽象级别 104
大小适中的聚合 106
可测试的单元 108
本章小结 108
第6章 运用领域事件进行战术设计 111
设计、实现并运用领域事件 113
事件溯源 119
本章小结 121
第7章 加速和管理工具 123
事件风暴 124
其他工具 134
在敏捷项目中管理DDD 135
运用SWOT分析法 137
建模Spike和建模债务 139
任务识别与工作量估算 140
限制建模时间 143
如何实施 144
和领域专家打交道 145
本章小结 147
参考文献 148