领域驱动设计与模式实战(china-pub首发)(Martin Fowler和Eric Evans两位大师联袂推荐)
基本信息
- 原书名: Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
- 原出版社: Addison-Wesley Professional
- 作者: (瑞)Jimmy Nilsson
- 译者: 赵俐 马燕新
- 丛书名: 图灵程序设计丛书 软件工程系列
- 出版社:人民邮电出版社
- ISBN:9787115212771
- 上架时间:2009-10-23
- 出版日期:2009 年11月
- 开本:16开
- 页码:354
- 版次:1-1
- 所属分类:
计算机 > 软件工程及软件方法学 > 综合
编辑推荐
Martin Fowler和Eric Evans两位大师联袂推荐.
.NET开发人员必读之作..
《企业应用架构模式》与《领域驱动设计》两大名著精髓的实战演练
教你穿越业务层、数据层和UI层之间重重障碍,打通任督二脉...
内容简介回到顶部↑
模式、领域驱动设计和测试驱动开发赋予架构师和开发人员前所未有的能力,使他们能够创建功能强大、健壮且可维护的系统。但是,如何在实际项目中充分发挥这些利器的潜力呢?.
本书中,作者将martin fowler《企业应用架构模式》和eric evans《领域驱动设计》两部经典名著中的思想精髓以及重构、测试驱动开发等技术融会贯通,并通过大量c#实例加以阐释,跨越了领域模型、数据库与ui 层之间的障碍,真实展示了创建高质量的企业级应用架构的全部过程。..
本书就像是精彩纷呈的旅行见闻,每一处的所思所想都闪耀着智慧的光芒,生动诠释了作者对面向对象开发中各种设计选择的深刻理解。...
本书中,作者将martin fowler《企业应用架构模式》和eric evans《领域驱动设计》两部经典名著中的思想精髓以及重构、测试驱动开发等技术融会贯通,并通过大量c#实例加以阐释,跨越了领域模型、数据库与ui 层之间的障碍,真实展示了创建高质量的企业级应用架构的全部过程。..
本书就像是精彩纷呈的旅行见闻,每一处的所思所想都闪耀着智慧的光芒,生动诠释了作者对面向对象开发中各种设计选择的深刻理解。...
作译者回到顶部↑
目录回到顶部↑
第一部分 背景知识.
第1章 应重视的价值,也是对过去几年的沉重反思 2
1.1 总体价值 2
1.2 应重视的架构风格 3
1.2.1 焦点之一:模型 3
1.2.2 焦点之二:用例 3
1.2.3 如果重视模型,就可以使用领域模型模式 6
1.2.4 慎重处理数据库 9
1.2.5 领域模型与关系数据库之间的阻抗失配 13
1.2.6 谨慎处理分布式 16
1.2.7 消息传递很重要 18
1.3 对过程的各个组成部分的评价 19
1.3.1 预先架构设计 20
1.3.2 领域驱动设计 21
1.3.3 测试驱动开发 22
1.3.4 重构 25
1.3.5 选择一种还是选择组合 26
1.4 持续集成 27
1.4.1 解决方案(或至少是正确方向上的一大步) 27
1.4.2 从我的组织汲取的教训 28
第1章 应重视的价值,也是对过去几年的沉重反思 2
1.1 总体价值 2
1.2 应重视的架构风格 3
1.2.1 焦点之一:模型 3
1.2.2 焦点之二:用例 3
1.2.3 如果重视模型,就可以使用领域模型模式 6
1.2.4 慎重处理数据库 9
1.2.5 领域模型与关系数据库之间的阻抗失配 13
1.2.6 谨慎处理分布式 16
1.2.7 消息传递很重要 18
1.3 对过程的各个组成部分的评价 19
1.3.1 预先架构设计 20
1.3.2 领域驱动设计 21
1.3.3 测试驱动开发 22
1.3.4 重构 25
1.3.5 选择一种还是选择组合 26
1.4 持续集成 27
1.4.1 解决方案(或至少是正确方向上的一大步) 27
1.4.2 从我的组织汲取的教训 28
译者序回到顶部↑
大多数开发人员对领域驱动设计、模型驱动开发、模式、重构等一些术语并不陌生,但要在实际开发工作中熟练运用这些技术却并不容易,因为这些概念本身就非常抽象、不易理解和难以运用。另外也缺乏这方面的优秀参考书和指导手册,虽然已经出版了一些相关参考书,网上也有一些资料可循,但很多材料过分注重理论,而对实际应用的讨论不够充分,即使有一些偏重实际应用的内容,也不一定适合我们的具体情况,借鉴意义并不大。.
然而,本书却完全不同。它将这些概念运用到实际示例中,真正在抽象理论与实践运用之间架起一座桥梁。本书的示例都是一些基本示例,它们可作为一个起始平台,帮助读者理解这些抽象概念,并一步步引导读者如何根据自己的特殊情况来应用这些技术。翻开本书,就仿佛作者站在我们身边一样,书中详细讲解了如何应用领域驱动设计和企业应用模式,分析了企业应用设计和开发的基本原则。伴随着作者的耐心讲解和深入剖析,漫长而充满挑战的学习之旅也充满了乐趣。
本书共分四部分:背景知识、应用DDD、应用PoEAA和下一步骤。背景知识这一部分概括讨论架构和过程,还介绍了模式和测试驱动开发。第二部分介绍DDD的应用,还会为基础架构准备领域模型,重点关注规则方面。第三部分引入Fowler的《企业应用架构模式》[Fowler PoEAA]一书中的几种模式,以此来讨论基础架构需要为领域模型提供哪些持久化支持。最后一部分主要关注并开始使用其他一些设计技术,重点是如何在领域模型中处理表示层,以跨越领域模型与表示层之间的鸿沟,此外还介绍了如何处理开发人员的UI测试。最后是两个附录,提供了更多领域模型风格的示例,并提供了一个模式目录汇总。..
本书是面向开发人员(特别是.NET开发人员)、团队领导者和架构师的。书中大部分内容适合中高级读者,也有些内容适合初级读者。关于如何将DDD和O/R映射结合起来使用的讨论和示例也为Java开发人员提供了一些借鉴。
要理解本书,并不需要高深的理论知识。具备面向对象、.NET或类似平台、C#或类似语言和关系数据库的知识有助于阅读本书,但是,兴趣和热情可以弥补任何经验的不足。
本书由赵俐翻译,参与翻译和审校工作的人员还有马燕新、王善凤、王举华、于波等。赵俐完成了本书的统稿工作。衷心感谢人民邮电出版社图灵公司傅志红老师在翻译工作中给予的精心指导和宝贵意见,同时感谢图灵编辑所做的大量工作。由于译者水平有限,在翻译过程中难免会出现一些错误,恳请读者批评指正。...
译者
2009年3月
然而,本书却完全不同。它将这些概念运用到实际示例中,真正在抽象理论与实践运用之间架起一座桥梁。本书的示例都是一些基本示例,它们可作为一个起始平台,帮助读者理解这些抽象概念,并一步步引导读者如何根据自己的特殊情况来应用这些技术。翻开本书,就仿佛作者站在我们身边一样,书中详细讲解了如何应用领域驱动设计和企业应用模式,分析了企业应用设计和开发的基本原则。伴随着作者的耐心讲解和深入剖析,漫长而充满挑战的学习之旅也充满了乐趣。
本书共分四部分:背景知识、应用DDD、应用PoEAA和下一步骤。背景知识这一部分概括讨论架构和过程,还介绍了模式和测试驱动开发。第二部分介绍DDD的应用,还会为基础架构准备领域模型,重点关注规则方面。第三部分引入Fowler的《企业应用架构模式》[Fowler PoEAA]一书中的几种模式,以此来讨论基础架构需要为领域模型提供哪些持久化支持。最后一部分主要关注并开始使用其他一些设计技术,重点是如何在领域模型中处理表示层,以跨越领域模型与表示层之间的鸿沟,此外还介绍了如何处理开发人员的UI测试。最后是两个附录,提供了更多领域模型风格的示例,并提供了一个模式目录汇总。..
本书是面向开发人员(特别是.NET开发人员)、团队领导者和架构师的。书中大部分内容适合中高级读者,也有些内容适合初级读者。关于如何将DDD和O/R映射结合起来使用的讨论和示例也为Java开发人员提供了一些借鉴。
要理解本书,并不需要高深的理论知识。具备面向对象、.NET或类似平台、C#或类似语言和关系数据库的知识有助于阅读本书,但是,兴趣和热情可以弥补任何经验的不足。
本书由赵俐翻译,参与翻译和审校工作的人员还有马燕新、王善凤、王举华、于波等。赵俐完成了本书的统稿工作。衷心感谢人民邮电出版社图灵公司傅志红老师在翻译工作中给予的精心指导和宝贵意见,同时感谢图灵编辑所做的大量工作。由于译者水平有限,在翻译过程中难免会出现一些错误,恳请读者批评指正。...
译者
2009年3月
前言回到顶部↑
本书的封面图片 是连接瑞典和丹麦的厄勒海峡大桥。似乎所有软件架构图书的封面都要有一座大桥,但本书选用大桥作为封面却有一些其他原因。.
就是这座大桥取代了我小时候乘坐过很多次的渡船。驱车穿越大桥是一种绝佳的体验,虽然我已经不下数十次穿越它,但还是乐此不疲。
题外话,我父亲曾经就在负责架设这座大桥最高部分的施工队中工作。
但这些并不是最主要的原因,主要原因是本书内容正是跨越鸿沟,即跨越用户与开发人员之间的鸿沟,跨越业务与软件之间的鸿沟,跨越逻辑与存储之间的鸿沟,跨越DB人员与OO人员之间的鸿沟……
我并不是拿桥接模式[GoF Design Patterns]来信口开河,这毕竟是前言啊!
本书的主旨
本书的主旨是如何将领域模型构建得整洁,且仍具有便于持久化的特性。书中展示了在这样一个领域模型中,持久化解决方案将以什么面貌出现,特别是如何在领域模型与数据库这道鸿沟上架起一座桥梁。
换言之,我的愿望是在本书中将Eric Evans的《领域驱动设计》[Evans DDD]和Martin Fowler的《企业应用架构模式》[Fowler PoEAA]融为一体。
人们可能认为DDD有些抽象。因此,具体示例有助于对本书的理解,例如对持久化概念的理解。这些示例可能比较基础,但它们可作为良好的开端。本书不仅解释了如何使用模式,而且阐述了如何在O/R映射工具中使用模式。
我非常清楚在架构方面“一种规格并非处处适用”。尽管如此,事实证明模式还是具有足够的通用性的,我们可以在各种各样的情况下使用和重用它们。
本书的重点并不是讲模式本身,而是在各个章节中穿插使用它们,将其作为工具和语言,用于讨论不同的设计方面。在这个过程中,不熟悉模式的读者可以获得模式的一些知识并对模式产生兴趣。
对于TDD也是如此。但是,并非所有开发人员都会对此感兴趣,在.NET社区中尤其如此,因为TDD(仅作为模式)被认为是一种应用范围很狭窄的技术,甚至完全是一种默默无闻的技术。本书将教会读者应用TDD。
本书的目的
在不耽搁其他日常项目和工作的情况下撰写我的第一本书[Nilsson NED],确实让我体会到了什么是艰苦。我当时已下定决心不再写书了。但时间还是改变了这个决定,因为我有话要说,而且不能不说了。
想法的改变源于最近阅读的两本书给我的灵感和触动。第一本书是Martin Fowler的《企业应用架构模式》[Fowler PoEAA]。这本书激发了我再次尝试领域模型模式的兴趣,尽管此前曾有过几次失败经历。
然后我读到了Eric Evans的《领域驱动设计》[Evans DDD]。这本书使我深入理解了如何思考和进行以领域为核心的开发,以及如何在这样的开发中使用特定的领域模型模式风格。
另一个重要影响就是在我多年的模式课程教学过程中所积累的知识。通过与学生们的交流以及教学内容的发展,我自己也有所感悟。
我参与一个宏大的(遗憾的是尚未完成)开源项目Valhalla上工作时,对DDD的认识也发生了转变,这个项目是我和Christoffer Skjoldborg协作开发的。(到目前为止,大部分工作都是由Christoffer完成的。)
总之,我觉得需要写一本应用多于理论的书,但这本书又要有坚实的基础,就像DDD和PoEAA那样。“应用”更贴近我的心声,因为我始终认为自己归根到底是一名开发人员。..
本书的读者
就是这座大桥取代了我小时候乘坐过很多次的渡船。驱车穿越大桥是一种绝佳的体验,虽然我已经不下数十次穿越它,但还是乐此不疲。
题外话,我父亲曾经就在负责架设这座大桥最高部分的施工队中工作。
但这些并不是最主要的原因,主要原因是本书内容正是跨越鸿沟,即跨越用户与开发人员之间的鸿沟,跨越业务与软件之间的鸿沟,跨越逻辑与存储之间的鸿沟,跨越DB人员与OO人员之间的鸿沟……
我并不是拿桥接模式[GoF Design Patterns]来信口开河,这毕竟是前言啊!
本书的主旨
本书的主旨是如何将领域模型构建得整洁,且仍具有便于持久化的特性。书中展示了在这样一个领域模型中,持久化解决方案将以什么面貌出现,特别是如何在领域模型与数据库这道鸿沟上架起一座桥梁。
换言之,我的愿望是在本书中将Eric Evans的《领域驱动设计》[Evans DDD]和Martin Fowler的《企业应用架构模式》[Fowler PoEAA]融为一体。
人们可能认为DDD有些抽象。因此,具体示例有助于对本书的理解,例如对持久化概念的理解。这些示例可能比较基础,但它们可作为良好的开端。本书不仅解释了如何使用模式,而且阐述了如何在O/R映射工具中使用模式。
我非常清楚在架构方面“一种规格并非处处适用”。尽管如此,事实证明模式还是具有足够的通用性的,我们可以在各种各样的情况下使用和重用它们。
本书的重点并不是讲模式本身,而是在各个章节中穿插使用它们,将其作为工具和语言,用于讨论不同的设计方面。在这个过程中,不熟悉模式的读者可以获得模式的一些知识并对模式产生兴趣。
对于TDD也是如此。但是,并非所有开发人员都会对此感兴趣,在.NET社区中尤其如此,因为TDD(仅作为模式)被认为是一种应用范围很狭窄的技术,甚至完全是一种默默无闻的技术。本书将教会读者应用TDD。
本书的目的
在不耽搁其他日常项目和工作的情况下撰写我的第一本书[Nilsson NED],确实让我体会到了什么是艰苦。我当时已下定决心不再写书了。但时间还是改变了这个决定,因为我有话要说,而且不能不说了。
想法的改变源于最近阅读的两本书给我的灵感和触动。第一本书是Martin Fowler的《企业应用架构模式》[Fowler PoEAA]。这本书激发了我再次尝试领域模型模式的兴趣,尽管此前曾有过几次失败经历。
然后我读到了Eric Evans的《领域驱动设计》[Evans DDD]。这本书使我深入理解了如何思考和进行以领域为核心的开发,以及如何在这样的开发中使用特定的领域模型模式风格。
另一个重要影响就是在我多年的模式课程教学过程中所积累的知识。通过与学生们的交流以及教学内容的发展,我自己也有所感悟。
我参与一个宏大的(遗憾的是尚未完成)开源项目Valhalla上工作时,对DDD的认识也发生了转变,这个项目是我和Christoffer Skjoldborg协作开发的。(到目前为止,大部分工作都是由Christoffer完成的。)
总之,我觉得需要写一本应用多于理论的书,但这本书又要有坚实的基础,就像DDD和PoEAA那样。“应用”更贴近我的心声,因为我始终认为自己归根到底是一名开发人员。..
本书的读者
序言回到顶部↑
序一
构建企业应用程序并非易事。尽管我们拥有大量工具和框架来简化这项任务,但仍然需要弄清楚如何更好地使用这些工具。大量方法可供我们选用,但关键是要知道在特定情况下应使用哪种方法,因为一种方法很难适用于所有情况。在过去几年中,有一个社区逐渐成长起来,人们不断寻找用于设计企业应用的方法,并以模式的形式将它们记录下来(我整理了一份概述,在http://martinfowler.com/articles/enterprisePatterns.html站点上)。参与这项工作的人们(例如我)试图找到公共方法,并描述如何更好地使用它们,以及它们何时适用。最后的结果过于宽泛,会导致为读者提供了过多的选择。.
当我开始创作Patterns of Enterprise Application Architecture(《企业应用架构模式》,Addison-Wesley公司2002出版)时,我曾在微软技术方面寻找过这种类型的设计建议。几经努力之后几乎一无所获,只找到了一本讨论此领域的书,就是Jimmy的前一本书。我喜欢他平易近人的写作风格,也喜欢他深入挖掘易被他人忽略的概念的热情。因此,Jimmy决定从我和企业模式社区中的其他人借鉴一些思想,并向读者展示在编写.NET应用程序时如何应用这些思想,我觉得再合适不过了。
这个企业模式社区的主旨是记录好的设计,但另一个思路也贯穿整个社区。我们也是敏捷方法的忠实爱好者,信奉诸如测试驱动开发(TDD)和重构这样的技术。因此,Jimmy也把这些思想带到这本书中。很多人认为模式与TDD是不一致的,因为模式的重点是设计,而TDD的重点是演进。但有很多人正在将这两种技术结合起来使用,这证明这种观点是错误的,Jimmy将这些思路也整合到本书中。
结果就诞生了这本有关在.NET环境中进行设计的书。它受到敏捷方式的推动,又倾注了企业模式社区的成果。它是一本向读者展示了如何将TDD、对象—关系映射和领域驱动设计等方法应用于.NET项目的书。如果读者以前未遇到过这些概念,那么会发现它是一本入门书,书中介绍的技术在很多开发人员看来是未来软件开发的关键。如果你熟悉这些思想,那么本书将帮助你将这些思想传递给你的同事。
很多人感觉微软技术社区在传播好的企业应用设计建议方面不如其他社区。随着技术越来越强大,复杂度越来越高,理解如何更好地使用技术就变得越来越重要。本书在推进这种理解方面迈出了可贵的一步。
Martin Fowler
http://martinfowler.com
序二
学习领域驱动设计(DDD)的最好方法是坐在一位友好、耐心且经验丰富的从业者身边,一步一步地共同研究问题。阅读本书正是这种体验。
本书并不是推出一个新的宏大方案,而是自然地报告了一位专家从业者是怎样使用及组合那些吸引他的当前实践的。..
Jimmy Nilsson重申了我们很多人都曾经说过的话:几个时下流行的主题,特别是领域驱动设计(DDD)、企业应用架构模式(PoEAA)和测试驱动开发(TDD),它们并不是彼此互斥的替代品,而是成功开发中互相促进的元素。
此外,这三种技术实际上比它们乍看起来要难得多。它们需要各个领域的渊博知识。本书在倡导这些方法上花费了一定的时间,但主要还是关注如何让它们发挥作用的细节。
有效的设计不仅仅是通过死记硬背来学会的一组技术,它更是一个思考的过程。当Jimmy深入剖析一个示例时,他为我们打开了了解他思维的一扇窗子。他不仅展示和解释了他的解决方案,而且让我们看到他是如何得到解决方案的。
当我设计某个系统时,有数十种想法会在脑海中闪现。如果它们是我经常处理的因素,那么会很快地闪过,我几乎意识不到。如果它们属于我不太确信的领域,那么我会更多地思考它们。我认为这是设计者遇到的典型现象,但很难将它传达给另一个人。当Jimmy仔细讨论他的示例时,就好像他把这个过程放了慢动作一样。在每个小的转折点,都会呈现3~4种选择,Jimmy对它们进行权衡和扬弃,最终选择最有利的一个。
例如,我们希望在不涉及持久化技术的情况下实现模型对象。那么,持久化框架会强制性“污染”领域对象实现的8种(是8种!)方式都是什么?是什么因素导致我们在其中的一些要点上做出折中?当前流行的框架(包括.NET)都强加了什么约束?
Jimmy的思考注重实效。他利用他的经验做出一种可能实现最终目标,并且遵守更深层次设计原则的设计选择,而不是看起来最符合教科书示例的选择。而且他的所有决定都是临时的。
Jimmy奉行的第一条设计原则就是DDD的基本目标:一个反映了对业务问题深刻理解的设计,而且在设计形式上,要使设计能够根据新方法做出调整。那么为什么还要讨论这么多技术框架和架构呢?
有一种常见(也很自然)的误解是:这种强调领域问题的优先考虑不需要太多技术才能和技巧。如果这是真的那就好了,要想成为一名胜任的领域设计师并不十分困难。可是,要想在软件中呈现清晰且有用的领域概念,以便它们不被大量的技术细节所淹没,就要求能娴熟地运用技术。据我观察,那些熟练掌握技术和架构原则的人通常知道如何把技术放在其适合的位置上,而且这些人也是最高效的领域建模人员。
我并不是说应该面面俱到地掌握复杂工具的所有知识,而是强调应该掌握Martin Fowler的PoEAA当中所展示的那类知识,因为盲目应用技术反而会导致对应用产生干扰。
构建企业应用程序并非易事。尽管我们拥有大量工具和框架来简化这项任务,但仍然需要弄清楚如何更好地使用这些工具。大量方法可供我们选用,但关键是要知道在特定情况下应使用哪种方法,因为一种方法很难适用于所有情况。在过去几年中,有一个社区逐渐成长起来,人们不断寻找用于设计企业应用的方法,并以模式的形式将它们记录下来(我整理了一份概述,在http://martinfowler.com/articles/enterprisePatterns.html站点上)。参与这项工作的人们(例如我)试图找到公共方法,并描述如何更好地使用它们,以及它们何时适用。最后的结果过于宽泛,会导致为读者提供了过多的选择。.
当我开始创作Patterns of Enterprise Application Architecture(《企业应用架构模式》,Addison-Wesley公司2002出版)时,我曾在微软技术方面寻找过这种类型的设计建议。几经努力之后几乎一无所获,只找到了一本讨论此领域的书,就是Jimmy的前一本书。我喜欢他平易近人的写作风格,也喜欢他深入挖掘易被他人忽略的概念的热情。因此,Jimmy决定从我和企业模式社区中的其他人借鉴一些思想,并向读者展示在编写.NET应用程序时如何应用这些思想,我觉得再合适不过了。
这个企业模式社区的主旨是记录好的设计,但另一个思路也贯穿整个社区。我们也是敏捷方法的忠实爱好者,信奉诸如测试驱动开发(TDD)和重构这样的技术。因此,Jimmy也把这些思想带到这本书中。很多人认为模式与TDD是不一致的,因为模式的重点是设计,而TDD的重点是演进。但有很多人正在将这两种技术结合起来使用,这证明这种观点是错误的,Jimmy将这些思路也整合到本书中。
结果就诞生了这本有关在.NET环境中进行设计的书。它受到敏捷方式的推动,又倾注了企业模式社区的成果。它是一本向读者展示了如何将TDD、对象—关系映射和领域驱动设计等方法应用于.NET项目的书。如果读者以前未遇到过这些概念,那么会发现它是一本入门书,书中介绍的技术在很多开发人员看来是未来软件开发的关键。如果你熟悉这些思想,那么本书将帮助你将这些思想传递给你的同事。
很多人感觉微软技术社区在传播好的企业应用设计建议方面不如其他社区。随着技术越来越强大,复杂度越来越高,理解如何更好地使用技术就变得越来越重要。本书在推进这种理解方面迈出了可贵的一步。
Martin Fowler
http://martinfowler.com
序二
学习领域驱动设计(DDD)的最好方法是坐在一位友好、耐心且经验丰富的从业者身边,一步一步地共同研究问题。阅读本书正是这种体验。
本书并不是推出一个新的宏大方案,而是自然地报告了一位专家从业者是怎样使用及组合那些吸引他的当前实践的。..
Jimmy Nilsson重申了我们很多人都曾经说过的话:几个时下流行的主题,特别是领域驱动设计(DDD)、企业应用架构模式(PoEAA)和测试驱动开发(TDD),它们并不是彼此互斥的替代品,而是成功开发中互相促进的元素。
此外,这三种技术实际上比它们乍看起来要难得多。它们需要各个领域的渊博知识。本书在倡导这些方法上花费了一定的时间,但主要还是关注如何让它们发挥作用的细节。
有效的设计不仅仅是通过死记硬背来学会的一组技术,它更是一个思考的过程。当Jimmy深入剖析一个示例时,他为我们打开了了解他思维的一扇窗子。他不仅展示和解释了他的解决方案,而且让我们看到他是如何得到解决方案的。
当我设计某个系统时,有数十种想法会在脑海中闪现。如果它们是我经常处理的因素,那么会很快地闪过,我几乎意识不到。如果它们属于我不太确信的领域,那么我会更多地思考它们。我认为这是设计者遇到的典型现象,但很难将它传达给另一个人。当Jimmy仔细讨论他的示例时,就好像他把这个过程放了慢动作一样。在每个小的转折点,都会呈现3~4种选择,Jimmy对它们进行权衡和扬弃,最终选择最有利的一个。
例如,我们希望在不涉及持久化技术的情况下实现模型对象。那么,持久化框架会强制性“污染”领域对象实现的8种(是8种!)方式都是什么?是什么因素导致我们在其中的一些要点上做出折中?当前流行的框架(包括.NET)都强加了什么约束?
Jimmy的思考注重实效。他利用他的经验做出一种可能实现最终目标,并且遵守更深层次设计原则的设计选择,而不是看起来最符合教科书示例的选择。而且他的所有决定都是临时的。
Jimmy奉行的第一条设计原则就是DDD的基本目标:一个反映了对业务问题深刻理解的设计,而且在设计形式上,要使设计能够根据新方法做出调整。那么为什么还要讨论这么多技术框架和架构呢?
有一种常见(也很自然)的误解是:这种强调领域问题的优先考虑不需要太多技术才能和技巧。如果这是真的那就好了,要想成为一名胜任的领域设计师并不十分困难。可是,要想在软件中呈现清晰且有用的领域概念,以便它们不被大量的技术细节所淹没,就要求能娴熟地运用技术。据我观察,那些熟练掌握技术和架构原则的人通常知道如何把技术放在其适合的位置上,而且这些人也是最高效的领域建模人员。
我并不是说应该面面俱到地掌握复杂工具的所有知识,而是强调应该掌握Martin Fowler的PoEAA当中所展示的那类知识,因为盲目应用技术反而会导致对应用产生干扰。
媒体评论回到顶部↑
“本书向读者展示了如何将测试驱动设计、对象-关系映射和领域驱动设计等方法应用于.NET项目……书中介绍的技术在很多开发人员看来是未来软件开发的关键……随着技术越来越强大,复杂度越来越高,理解如何更好地使用技术也变得越来越重要。本书在推进这种理解方面迈出了可贵的一步。”.
——Martin Fowler,ThoughtWorks公司首席科学家,《重构》与《企业应用架构模式》作者
“学习领域驱动设计的最好方法是坐在一位友好、耐心且经验丰富的从业者身边,一步一步地共同研究问题。阅读本书正是这种体验。”
——Eric Evans,领域驱动设计创始人
“在我使用领域驱动设计(DDD)和测试驱动开发(TDD)这两种方法之前,我无法说清楚自己每天都在做些什么,但现在看来,只能勉强说我不过是做了些毫无头绪的工作。领域驱动设计和测试驱动开发这两种方法不断指导我正确应用软件原则,并且让我的项目开花结果,得到健康的、可不断改进的软件。这是一本名副其实的好书,它具体地介绍了敏捷软件开发实践。到目前为止,此书堪称对于.NET软件开发社区的所有成功软件开发实践最具影响力的指南之一。”
Scott Bellware,微软C# MVP,DDD和TDD博客作者
“Jimmy Nilsson帮了读者一个大忙,他展示了如何应用Evans、Fowler等思想领袖教给我们的企业应用设计和开发的基本原则。本书使用一个实例解释和演示了领域驱动设计、企业应用架构模式以及测试驱动开发。Jimmy展现的洞察力和经验使阅读本书充满乐趣,读者不得不承认他们正师从一位资深从业者。正在寻求掌握这些原则的企业开发人员将会发现本书是一本宝贵的指南。”
Jack Greenfield,微软公司Visual Studio 团队 Enterprise Tools架构师
“好的软件架构师都希望能够更上一层楼。除了交付当前系统以外,他们还力图发现更好的软件设计和构建方式。本书就像是一部精彩纷呈的旅行见闻讲座,Jimmy在书中记录了他在各种模式、实践和技术道路上的旅程,并解释了他对于企业系统的思考是如何演变的。如果你正沿着相同的路线前进,那么本书将是一个很好的伙伴。”
Tim Ewald,Foliage 软件公司首席架构师,
Transactional COM+: Building Scalable Applications一书作者
“本书极为出色,它让那些庞大且重要的领域驱动设计思想触手可及。”
Floyd Marinescu,EJB Design Patterns一书作者,
著名技术社区InfoQ.com和TheServerSide.com创始人
“理解问题领域中的概念和驱动力量对于软件开发成功具有至关重要的意义。Jimmy Nilsson从他对模式和领域驱动设计的10年研究中提炼出灵感,记录了他自己从具体开发项目中汲取的经验。本书包含一些关于如何将理论转化为实践的生动示例,展示了作者对面向对象开发中的设计选择和方案折中的深刻理解。”..
Anders Hessellund,丹麦哥本哈根IT大学
“本书紧扣一个重要领域,这个领域对大多数在.NET平台上工作的开发人员都提出了挑战。我是一名负责推动.NET企业指导工作的模式和实践架构师,深知这个领域对客户的重要性,同时深深认识到我们的指导工作仍存在巨大差距。
我很激动地看到Jimmy将他从事DDD和TDD的经验拿出来与我们分享。我相信此时此刻,通过重点关注构建应用程序的简单性、模式以及对社会层面的认识,这个主题会及时得到最好的处理。
我相信Jimmy在.NET方面的经验和知识,也很欣赏他讲述概念和故事的风格。我很难想出还有什么别的人更适合解释这个我每天都在上面工作的平台。
我会毫无保留地将Jimmy的这本书推荐给我的客户、我的团队和其他微软工程师。
——Martin Fowler,ThoughtWorks公司首席科学家,《重构》与《企业应用架构模式》作者
“学习领域驱动设计的最好方法是坐在一位友好、耐心且经验丰富的从业者身边,一步一步地共同研究问题。阅读本书正是这种体验。”
——Eric Evans,领域驱动设计创始人
“在我使用领域驱动设计(DDD)和测试驱动开发(TDD)这两种方法之前,我无法说清楚自己每天都在做些什么,但现在看来,只能勉强说我不过是做了些毫无头绪的工作。领域驱动设计和测试驱动开发这两种方法不断指导我正确应用软件原则,并且让我的项目开花结果,得到健康的、可不断改进的软件。这是一本名副其实的好书,它具体地介绍了敏捷软件开发实践。到目前为止,此书堪称对于.NET软件开发社区的所有成功软件开发实践最具影响力的指南之一。”
Scott Bellware,微软C# MVP,DDD和TDD博客作者
“Jimmy Nilsson帮了读者一个大忙,他展示了如何应用Evans、Fowler等思想领袖教给我们的企业应用设计和开发的基本原则。本书使用一个实例解释和演示了领域驱动设计、企业应用架构模式以及测试驱动开发。Jimmy展现的洞察力和经验使阅读本书充满乐趣,读者不得不承认他们正师从一位资深从业者。正在寻求掌握这些原则的企业开发人员将会发现本书是一本宝贵的指南。”
Jack Greenfield,微软公司Visual Studio 团队 Enterprise Tools架构师
“好的软件架构师都希望能够更上一层楼。除了交付当前系统以外,他们还力图发现更好的软件设计和构建方式。本书就像是一部精彩纷呈的旅行见闻讲座,Jimmy在书中记录了他在各种模式、实践和技术道路上的旅程,并解释了他对于企业系统的思考是如何演变的。如果你正沿着相同的路线前进,那么本书将是一个很好的伙伴。”
Tim Ewald,Foliage 软件公司首席架构师,
Transactional COM+: Building Scalable Applications一书作者
“本书极为出色,它让那些庞大且重要的领域驱动设计思想触手可及。”
Floyd Marinescu,EJB Design Patterns一书作者,
著名技术社区InfoQ.com和TheServerSide.com创始人
“理解问题领域中的概念和驱动力量对于软件开发成功具有至关重要的意义。Jimmy Nilsson从他对模式和领域驱动设计的10年研究中提炼出灵感,记录了他自己从具体开发项目中汲取的经验。本书包含一些关于如何将理论转化为实践的生动示例,展示了作者对面向对象开发中的设计选择和方案折中的深刻理解。”..
Anders Hessellund,丹麦哥本哈根IT大学
“本书紧扣一个重要领域,这个领域对大多数在.NET平台上工作的开发人员都提出了挑战。我是一名负责推动.NET企业指导工作的模式和实践架构师,深知这个领域对客户的重要性,同时深深认识到我们的指导工作仍存在巨大差距。
我很激动地看到Jimmy将他从事DDD和TDD的经验拿出来与我们分享。我相信此时此刻,通过重点关注构建应用程序的简单性、模式以及对社会层面的认识,这个主题会及时得到最好的处理。
我相信Jimmy在.NET方面的经验和知识,也很欣赏他讲述概念和故事的风格。我很难想出还有什么别的人更适合解释这个我每天都在上面工作的平台。
我会毫无保留地将Jimmy的这本书推荐给我的客户、我的团队和其他微软工程师。
评论交流
共有52人开贴评论 76人参与评论 30人参与打分 查看
评价等级:





发表于:2009-11-4 8:48:00
Infoq推出过《领域驱动设计精简版》(http://www.infoq.com/cn/minibooks/domain-driven-design-quickly)。在这部书的前言中,作者说:“这本书可以让你快速了解领域驱动设计的基础知识,但不能替代 Eric 书中提供的大量事例和案例研究或者 Jimmy 书中提供的动手
事例等。我非常鼓励大家去阅读这两本绝对优秀的书籍。”Eric书就是那本经典的DDD,Jimmy书就是这本ADDDP。
ADDDP用非常精彩地案例,展示了如何用测试驱动领域建模,如何用模式和设计策略来应对不完美的世界。在我看来,ADDDP对于敏捷软件开发有重要贡献。它回答了如何用迭代地方式来逐步完善领域模型,为敏捷设计拼上了重要一环。从某个层面,也反击了“敏捷软件开发无设计”的论调。
DDD的道路总是困难的。Jimmy也承认,他没有提供终极答案。但ADDDP揭示了一种有前景的设计和技术思路,为未来更漫长的开发旅途提供了长久的支持。
事例等。我非常鼓励大家去阅读这两本绝对优秀的书籍。”Eric书就是那本经典的DDD,Jimmy书就是这本ADDDP。
ADDDP用非常精彩地案例,展示了如何用测试驱动领域建模,如何用模式和设计策略来应对不完美的世界。在我看来,ADDDP对于敏捷软件开发有重要贡献。它回答了如何用迭代地方式来逐步完善领域模型,为敏捷设计拼上了重要一环。从某个层面,也反击了“敏捷软件开发无设计”的论调。
DDD的道路总是困难的。Jimmy也承认,他没有提供终极答案。但ADDDP揭示了一种有前景的设计和技术思路,为未来更漫长的开发旅途提供了长久的支持。
| 我要写评论 |
| 查看所有评论交流(共52条) |








点击看大图





加载中...

