原文 http://www.jdon.com/jivejdon/thread/39472
flyzb
发表文章: 18
注册时间: 2010年10月01日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 1人关注
对领域驱动设计的初步认识(二) 2010年10月14日 21:56 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
标签 DDD领域驱动设计 软件观点
1
顶一下
对于上一个帖子,大家有一些讨论。有人说“领域驱动设计”非常好,也有人说“领域驱动设计”有问题。其实大家都有道理,我针对大家的讨论进一步谈一下自己的认识。
先谈谈现实业务中的问题域模型,这个模型不是“领域驱动设计”一书中的“领域”,那个“领域”更侧重强调是“领域模型”。可惜目前似乎还没有一种办法能够去立体化并动态地完整描述这个“问题域模型”。为什么我要强调这个东西,就是让大家想一想我们为什么要需要“领域驱动设计”。其实我们有一个永恒的技术使命,就是要解决“问题域模型”的变化问题,因为“领域模型”会存在与”问题域模型“不匹配的问题,这个可能是时间变化或者用户场景变化的原因造成的。对”领域模型“的检验标准就是看是否能适应”问题域模型“的变化,其中”开闭原则“是在这里适用的。
所以对"领域驱动设计"的第一层”驱动“的含义,我觉得是"问题域模型"驱动"领域建模"以及"测试建模"。从这一点来说,"领域驱动设计"是适合一切场景的,而有人说”领域驱动设计“有问题,准确地来讲是目前的"领域建模技术"还不完善,当然也可以说是"领域建模技术"的运用有问题。这就像最近有人说"面向对象编程走错了路",其实并不是真的说OO错了,而是说"传统OO"有很大的缺陷,首先第一条就是"没有面向消息的传递机制"。
对于有人说“领域建模”只适应“稳定领域”,我并不赞同。我认为领域建模的真谛是认清业务发展变化的脉络,其最高境界就是“庖丁解牛”。因为真实世界中并不存在“稳定领域”,业务的变化是一种永恒。如果业务永远不变,那就我们就真的幸福了,只要满足用户需求,怎么设计都可以了。
关于"领域驱动设计"的第二层含义在上一个帖子里已经分析过了。
总结一下,"领域驱动设计" = “问题域模型驱动领域建模” + “领域建模驱动软件实现”。
呵呵,总算买了一本Eric的注释版,后面将真正进入“领域建模技术”的学习,望与大家共勉。另外,我也不赞同在远程交互中传递复杂的领域对象。
[该贴被flyzb于2010-10-14 23:06修改过]
xmuzyu
发表文章: 432
注册时间: 2007年03月26日
悄悄话
个人博客
在线? 我在线上
我要关注该作者发言 18人关注
回复:对领域驱动设计的初步认识(二) 2010年10月14日 23:15 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
顶一下
2010年10月14日 21:56 "flyzb"的言论
对于有人说“领域建模”只适应“稳定领域”,我并不赞同。我认为领域建模的真谛是认清业务发展变化的脉络,其最高境界就是“庖丁解牛”。因为真实世界中并不存在“稳定领域”,业务的变化是一种永恒。如果业务永远不变,那就我们就真的幸福了,只要满足用户需 ...
你说的变化,我认同。其次你稳定的理解有点问题,我没说什么稳定领域,我是说相对稳定,是这个行业已经出现好多年了,本身行业积累也比较丰富了,大家对行业的认识也都有一个大致统一的认识,而对于一些新起行业,前期都处于探索阶段,这个领域根本不稳定,或者大家都没有对这个东西形成共识,如果前期采用领域驱动设计,你抽象出的那些东西不一定能经得起时间的考验,当然这不能怪你,因为大家对这新的东西,创意型的东西都还没有共识,这就需要通过积累去完善,但是对于此种类型的项目,尤其是互联网项目,项目周期都很短,如果你项目上线晚了,也许就失去了上线的意义了,而此时如果为了领域驱动设计而去领域驱动设计,只能拖了项目的腿,还不如初期先采用一种折中的方式,先按照大家都能普遍接受的一种方式做,以后再重构,随着后期的发展,大家对领域概念都认识清楚了,或者说领域概念慢慢凸显出来了以后,这个时候再领域驱动设计,总之,领域驱动设计的前提是你得认清楚领域的实质,需要时间的积累,并不是任何团队都可以在项目时间容许的范围内搞的定的.
最后还是那句话,领域驱动设计是好,但是不要企图任何项目都适用。
[该贴被xmuzyu于2010-10-14 23:17修改过]
flyzb
发表文章: 18
注册时间: 2010年10月01日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 1人关注
1楼 对领域驱动设计的初步认识(二) 2010年10月14日 23:56 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
顶一下
To xmuzyu
我明白你的意思了。对于你说的情况,我说的“第一层含义”仍然是成立的。不过对于原型或者快速开发的问题,我认为“领域驱动设计”仍然是适用的。不是说领域相对稳定了或者成熟了,才可以进行“领域驱动设计”,而我认为“领域驱动设计”恰恰在业务不成熟时的分析过程中价值更大。因为越是不成熟的业务越是变化快,而这时候需要从多种领域维度分析业务可能变化。问题域建模的过程就是业务领域分析的过程,对于企业而言就是业务架构的分析和建立过程,这里不包含任何OO的设计成分,主要从组织、流程和业务能力三个维度来分析业务。对于不同的企业,还要从不同企业的组织以及各方面的特点去分析为什么这个企业的业务是这个样子,对于新兴的SNS网站也同样如此。
对于Eric提出的东西,我认为更多的是一种领域建模技术。你说的不足,我感觉更多的是这种技术的不足,但不能去指责思想本身。
另外,对于用户业务的不成熟。我们应该去分析真正的业务是什么样子,而用户的业务为什么是这个样子。好的领域建模应该具有柔性,能够伴随着用户一起成长。如果国内企业管理规范了,我估计国内很多小公司都会没有饭碗的,因为他们的生存机会其实就是中国用户的管理不规范性。当然,对于我们做领域建模的,是不是也应该有一些骨气。
对于项目的快与不快,首先看做项目的目的是什么:挣银子,还是真的做好项目。扭曲的领域建模,比如基于关系数据库表设计的建模,也许在初期的开发效率上满足用户的需求,但是上线后的适应性更改就可能慢了。往往用户认为大体的业务基本差不多了,只要小小的一点更改就可以了,可实际设计上需要大量的更改,这样的例子应该很多。“领域建模”做得好,软件的适用性强,意味着这个模型也能快速地推广到其他用户,这样软件开发的利润才能最大化。
[该贴被flyzb于2010-10-15 00:14修改过]
xmuzyu
发表文章: 432
注册时间: 2007年03月26日
悄悄话
个人博客
在线? 我在线上
我要关注该作者发言 18人关注
回复:1楼 对领域驱动设计的初步认识(二) 2010年10月15日 00:41 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
顶一下
2010年10月14日 23:56 "flyzb"的言论
对于项目的快与不快,首先看做项目的目的是什么:挣银子,还是真的做好项目。扭曲的领域建模,比如基于关系数据库表设计的建模,也许在初期的开发效率上满足用户的需求,但是上线后的适应性更改就可能慢了。往往用户认为大体的业务基本差不多了,只要小小的一 ...
恩,认同你的一些观点。不采用领域驱动设计并不一定是面向关系库设计。采用领域驱动设计是一个起初慢,但是越到后期越快的方式,这其实就是领域驱动很关键的一点,因为随着项目的发展,我们将对领域的理解,慢慢重构到了领域模型中,那么这个领域模型必将越来越能经得起考验。但是做领域驱动设计前期要做的工作很多,如果一个项目没有时间限制,没有上面给你的压力,即使这个项目是产品经理一时脑子发热想出来来的奇思妙想,你完全可以按照领域驱动设计去做,因为有时间,领域的概念你可以花很多时间去抽取,去积累,当然这种情况很少。所以我说并不是任何项目或者任何项目的任何生命周期里都适合领域驱动设计,也许有些项目上线后发现市场反应不行,后期都不做了,你前期花了那么多精力和时间搞出来的东西是不值得的,所以还是要有把握好领域驱动设计切入到项目周期的时机。
另外不要什么都领域驱动设计,要综合考虑其他方面的因素,比如项目周期,项目本身的逻辑是否复杂等,不要一味的啥都要来一把领域驱动设计,这样反而让领导觉得,你说领域驱动设计多好多好,怎么做了这么久第一期还没出来。所以为了让领域驱动设计走的更远,我们最好把握个度,这个度很重要,虽然我本人也一直坚持领域驱动设计,也在公司极力倡导领域驱动设计,但是要想让领域驱动设计真正运用到互联网项目里,我还需更加努力。
flyzb
发表文章: 18
注册时间: 2010年10月01日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 1人关注
1楼 对领域驱动设计的初步认识(二) 2010年10月15日 08:14 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
顶一下
嗯。。表示理解。作为我们自己,首先是一种坚持。目前很多公司都很浮躁,这也是现实。
分享到:
相关推荐
在《小数的初步认识》中,设计如“你见过小数吗?”、“你还知道哪些不同的小数?”以及“小数 ‘小’ 吗?”这样的驱动问题,旨在引起学生对小数的兴趣,逐步揭示小数的本质,帮助他们从生活实例中感知小数的存在和...
例如,在教授乘法的初步认识时,教师可以利用学生对加法的认知经验,通过实物、图形、线段、点数等多种素材来引导学生进行思考,使他们能够通过已有的加法知识来理解乘法的含义,从而深入理解乘法与加法的关系。...
综上所述,这个实验让参与者对管理信息系统有了初步的认识,特别是它在财经管理中的应用。通过顶尖酒店管理信息系统的实践,学生们了解到MIS如何帮助组织高效运作,同时也认识到系统易用性和功能完善的重要性。在...
CAM(Computer-Aided Manufacturing)是指利用计算机辅助进行生产制造的过程,它将CAD设计的数据转化为可直接驱动生产设备的控制指令。CAM系统包括工艺规划、数控程序编制、工装设计、生产调度以及质量控制等环节。...
1. C++的初步认识:C++是C语言的扩展,由Bjarne Stroustrup在1983年提出,它引入了类和对象的概念,支持面向对象编程(OOP)。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持...
”驱动示例,让学员对驱动开发有初步认识。 2. **第二天实验**:可能涉及I/O管理和中断处理,讲解如何与硬件设备进行通信,包括读写端口、使用DMA(直接内存访问)等。 3. **第三天实验**:通常会深入到设备驱动...
1. **Linux内核基础**:介绍Linux内核的基本架构、模块化设计以及设备模型,让读者对Linux内核有初步的认识。 2. **设备驱动分类**:讲述字符设备、块设备和网络设备等不同类型的驱动,以及它们在Linux中的处理方式...
在深入探讨VxWorks驱动程序编写之前,我们首先需要对VxWorks系统有一个基本的认识。VxWorks是由Wind River Systems开发的一款实时操作系统(RTOS),它以其高性能、高可靠性和灵活性著称,在航空航天、国防、网络...
这篇文章主要探讨了在数学教学中如何通过问题驱动来促进学生的深度学习,并以小学数学中“认识面积”的教学为例,具体展示了如何通过问题设计和课堂活动来激发学生对关键概念的理解和掌握。 知识点一:问题驱动教学...
《Windows CE开发初步》 ...通过阅读《Windows CE开发初步》这份文档,你将能够建立起对Windows CE开发的全面认识,为你的嵌入式项目打下坚实的基础。无论你是初次接触还是希望深化理解,都能从中受益匪浅。
* 评价标准包括学生对SCRATCH工作界面的认识、对程序设计的掌握、对造型设计的创新性等。 SCRATCH全套教案设计37979.doc提供了完整的教学资源和评价标准,旨在帮助学生学习SCRATCH编程语言和提高编程能力和逻辑思维...
【大班语言领域“我长大以后”活动设计】 在大班阶段,针对孩子们的语言教育,设计以“我长大以后”为主题的活动,旨在提前启发孩子们对未来职业的兴趣和理想,培养他们的创新思维、毅力和自主学习能力。这样的教育...
《汽车发动机曲轴工艺设计》是一项重要的机械设计毕业设计,主要涵盖了汽车...通过这样的毕业设计,学生能够全面掌握从理论到实践的转化过程,对汽车发动机曲轴的制造有深入的认识,从而为汽车工业的发展做出贡献。
在教学前,学生已经对计算机有初步认识,并且通过上一节课了解了Windows的基础知识。教学内容的重点在于掌握打开、移动和改变窗口大小的操作,这对于后续学习其他应用软件至关重要。 教学目标分为三个领域:认识...
这种学习方式激发了学生的兴趣,增强了他们对人工智能服务于生活价值的认识。 总结来说,小学人工智能初步课程通过精心设计的内容和有效的教学模式,尤其是项目化学习,能够有效地培养学生的计算思维和其他关键素养...
接着,文档详细解析了多轴器的基本概念,包括其定义和分类,让读者对多轴器有初步的认识。1.3.1章节简单介绍了多轴器,指出它是实现多轴联动加工的关键设备;1.3.2章节则列举了多轴器的不同类型,如立式、卧式、五轴...
课程还鼓励孩子们发挥想象力,认识到钟表可以有各种形状,如圆形、三角形、菱形甚至是动物形状,这不仅增加了孩子们对钟表设计的认识,也启发他们用日常生活中的物品创作个性化的小钟表,比如一次性杯子,以培养他们...
例如,在《角的初步认识》的教学中,教师可从学生已经熟悉的生活物品三角尺入手,引导学生通过拼接三角尺探索不同的角。这种与学生生活经验紧密结合的问题设计,有助于学生更深刻地理解数学概念。 此外,教师在运用...
总的来说,"认识多媒体技术"这节课旨在帮助初一学生了解多媒体技术的基础知识,体验其在不同领域的应用,并通过实践操作,提高他们的信息技术素养,为后续的多媒体创作打下基础。通过互动和探索式学习,使学生能够在...
Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...