DDD读书笔记-partI将领域模型应用到工作总述

原创 2007年09月12日 13:48:00
  下面是我翻译了partI的总述。
上图是18世纪中式地图,它代表了整个世界。中心的部分和大部分其他地区的空间就是中国,周围被其他国家环绕。这是适合于向核心本质发展的社会的世界的一个模型。这个世界总榄图对于外国人不一定是有帮助的,当然这并不能代表当今的现代中国。地图就是模型,每个模型代表一些抽象方面活则某个方面的思想。一个模型是简单化的东西。它是解决手头的问题忽略外围的一些细节抽象的一种表达方式。
       每个软件程序都和它的使用者的活动和兴趣有关。这个目标区域是使用者将软件的领域应用到程序中。一些领域包括物理世界:一个网上订机票程序的领域包括一些在需要上飞机的现实生活中的人。一些领域是触及不到的:寄费程序的领域是钱和金融。软件领域经常需要计算机做是事情很少。尽管这其中有些异常,源代码控制系统的领域就是软件开发本身。
       为了创建在使用者活动中有意义的软件,一个开发团队必须了解关于那些活动的整个体系的知识。这个知识领域的宽度可能会使人畏惧,我们可能被大量复杂的信息所覆盖。模型就是帮助我们抓住本质的工具。一个模型是有选择的简化问题,有意识的构建知识结构形态。一个合适的模型能够理解大量的信息并且关注在一个问题上。
       一个领域模型不是图表的一部分,它是图表表达的思想,它不只是领域专家头脑中的知识,它是对知识严格的组织和有选择的抽象。一个图表可以代表或者沟通一个模型,也可以写成代码,也可以写成语句。
       领域模型不是尽可能的做一个现实的模型。即使在有形的现实世界中的领域模型,我们的模型是人工产物。它不只是能够得出必要结果的软件机制的结构,它更像是电影制片业,松耦合的表达特定的目的。即使是记录片也不是要对现实生活的没有任何删减体现。就好像一个电影制作商经过挑选经验的方面和以某种气质活则某个重点的方式来表达他们。一个领域建模者应该为它的功能点选择特定的模型。
领域驱动设计中的模型的实用性
       在领域驱动设计中,三个基本的因素决定模型的选择
       1 模型和设计核心彼此成型:模型和使模型相关的分析最终应用到产品和最终的运行程序的保证是紧密相关的。模型和实现之间的捆绑关系同时也帮助我们维持和继续开发工作,因为代码可以作为模型的理解的一种解释。
       2 模型是整个团队成员语言的骨架。正是因为有了模型和实现之间的捆绑关系,开发者们才能够在讨论程序的时候用这个语言。他们可以直接和领域专家沟通。因为语言是建筑在模型的基础商的,我们的自然语言的能力可以被精练为模型本身。
       3 模型是一种蒸馏法知识。模型是的整个团队针对领域知识结构共同商议出来的结果,它区别于其他大量的兴趣点元素。一个模型能够帮助我们在选择术语,确定概念并关联他们的时候抓住如何选择模型的要点。这个共享语言允许开发者和业务专家在进行信息的成行过程中有效的合作。模型和实现的这种捆绑使早期实现的一些软件应用的版本可以反馈到模型过程中。
       。软件的心脏
       软件的心脏是它为使用者解决领域相关问题的能力。所有其他的特性,即使是有生命力的,可以支持这个基本目标。当这个领域是复杂的时,这是个困难的任务。需要集中那些有才干有技能的人。开发者不得不使自己沉浸在领域中去搭建他们的业务知识。他们研磨他们的领域技能,掌握领域设计
       在大多数的软件项目中我们都没有什么优势,大部分有才干的开发者都没有太多的兴趣去学习某个特殊领域的知识,他们只是在需要用时,临时的扩充他们的领域技能。技术人员喜欢可计量的问题,那样可以锻炼他们的技术技巧。领域工作时凌乱的,而且要求很多复杂的新知识,而这些知识又不能给一个计算机行家的能力增加的什么身价。
       那么作为代替的,技术天才们去做了一个精巧的框架,试图用技术来解决领域问题。学习关于领域模型是其他方面的首要问题,软件心脏的复杂性必须从头开始。其他的事情如果被关注为第一位,那么就是非常有风险性的了。
       在一个电视节目中,喜剧演员John Cleese给我们将了一个在拍摄Monty Python and Holy Grail 电影的事情。他们被要求重复的演某场戏,但是它并没什么意思。最后,他和另外一个喜剧演员商量,他们做了点小改动,再试一次时,表演堪起来比较有趣,这样结束了他们的拍摄。第二天Cleese看到一些被剪裁过的部分,更早的某个版本被采用了。他直接问电影编辑为什么不用最后一个,电影编辑说:“不能用那个,有人闯入了镜头。”Cleese又看了一遍,他还是没有看到哪里有问题。最后电影编辑停住了画面,指给他看,看到了在镜头的某个边角有个衣服袖子。电影编辑关注在他自己的领域的精确的执行中。他关注其他的电影编辑同行们看他本身的技术的完美性。在这个过程中,场景的核心的东西被丢弃了。不过还好的是,这个有趣的镜头被一位懂得喜剧的导演收藏了。同样的,团队中的领导者理解领域的核心,才能将他们的软件项目开发的主要重点放在如何深刻的理解上,而去除那些不重要的东西。
       本书将展示给我们,领域开发给精于设计技术的人提供了机会。大多数软件领域的凌乱现象是目前比较关注的一个技术挑战。事实上,在很多科学性的原理中,复杂性是大多数更人兴奋的时髦话题之一。研究者们试图处理现实世界中的这些凌乱的东西。一个软件开发者也有同样的目标尤其当他们面对着一个从未被整理过的复杂领域。创建一个清晰的模型去处它的复杂性是非常令人兴奋的。
       这里为开发者提供了系统的方法可以拥有找到有效模型的洞察力。还提供了一些设计技能可以衍生出软件应用。养成这些技巧使开发者更有价值,甚至在面临一个不熟悉的领域的初期一样奏效。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Hibernate实战读书摘要(2)—领域模型和元数据

Hibernate不要求持久化类实现Serializable(可序列化)。然而,当对象被存储在一个HttpSession中,或者用RMI按值传递时,就需要序列化。(这可能发生在Hibernate应用程...

[编程思想]领域模型和缓存应用【二】

原文链接 (感谢原文作者) 5 领域驱动设计实战 5.1传统的开发方式和领域驱动设计对比 传统的软件一般是action->service->dao,系统大部分的业务逻辑都...
  • joyeu
  • joyeu
  • 2014-12-11 18:16
  • 687

.NET应用架构设计—适当使用活动记录模式代替领域模型模式

阅读目录: 1.背景介绍 2.简单介绍领域模型模式、活动记录模式 3.活动记录模式的简单示例及要点 4.总结 1.背景介绍 对软件开发方法论有兴趣的博友应该发现最近“领域驱动设计”慢慢...

领域模型驱动应用心得

几乎每种语言、开发框架和工具面世时,都号称要把开发人员解放出来,让他/她们更加关注于业 务逻辑的处理。但目前的工作状况是,每当一个新的“解放工具”出现,就会有众多的技术狂热者蜂拥而上,而忽略了他们最应...

[编程思想]领域模型和缓存应用【一】

原文链接(感谢原文作者!) 前几天给部门内部做了一个DDD方面的培训,这篇文章就记录一下培训的主要内容。   一 软件的目标是什么 软件的目标是快速地响应客户的需求...
  • joyeu
  • joyeu
  • 2014-12-11 18:12
  • 749

系统分析与设计学习笔记(四)领域模型

领域模型的概念领域模型Domain Model 又叫做业务对象模型,是用于描述用例实现的对象模型,是对业务角色与业务实体之间应该如何联系和写作以执行业务的一种抽象。领域模型是面向对象分析的重要一环,也...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)