网站首页源码,诸暨市住房和建设局网站,网站开发交互原型标注图,网站开发常见面试题相关链接
DDD领域驱动设计批评文集
汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第2章#xff08;1#xff09;
可不是乱打的-《实现领域驱动设计》中译本评点-第2章#xff08;2#xff09;
“领域”的错误定义-《实现领域驱动设计》中译本评点-第2章
汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第2章1
可不是乱打的-《实现领域驱动设计》中译本评点-第2章2
“领域”的错误定义-《实现领域驱动设计》中译本评点-第2章3
《实现领域驱动设计》的翻译错误
[答疑]《实现领域驱动设计》的译者其实没错?一
[答疑]《实现领域驱动设计》的译者其实没错?二 上一篇文章《“领域”的错误定义》讲述《实现领域驱动设计》原文中把“领域”定义为“组织做的事”是错误的。
接下来我们来看看领域和组织之间怎样能扯上关系。
很多学科都使用“领域domain”这个词函数的定义域、网站的域名等等里面的“域”就是domain。
对于软件开发domain指的应该是软件系统需要封装的知识领域knowledge domain。
1客观规律
宇宙、星系、星体、生命体、细胞、原子、基本粒子当然还有人类社会及其衍生物万事万物都存在其运转的客观规律。
★无论人类存在还是已灭绝无论人类是否认识这些客观规律无论认识的精确度如何这些客观规律就在那里。
2领域知识
经过不断积累和整理人类对万事万物的认识形成各种领域知识而且不断更新。有的更新朝着接近客观规律的方向有的更新则有意无意地偏离客观规律。
虽然一直在进步特别是近200年进步飞快但目前人类认识客观规律的总体精确度应该偏低——毕竟才0.7级文明嘛。 当前存在的领域知识中
①有一部分知识精确度最高例如各种最新的科学研究成果。
②有一部分知识曾经精确度最高但现在已经被精确度更高的知识取代例如阴阳五行、地心说。当然至今仍然有很多人相信或假装相信这些知识的精确度很高——“****博大精深”。
③有一部分知识是基于①②为了某种目的想象和杜撰的。
可以为了娱乐而杜撰例如武侠小说中的武学知识体系、当代网络小说中的修真体系、游戏中的英雄技能体系。大家明知不是真的但依然乐在其中。
还可以为了**而杜撰例如此处作者删除283字。
从上面可以看出
★领域知识虽然源于客观规律但不一定接近客观规律或追求接近客观规律。
许多软件系统封装的是②或③的知识例如一款看风水的系统、一款修真游戏。
★领域知识中涉及到人类社会或人体的知识只占很少一部分而且精确度偏低。
领域知识是人类对万事万物的认识而人类自身甚至包括其他生命体在内在这万事万物中能占多少比例呢
目前人类能造出机器人造出宇宙飞船但无法合成不是繁殖出一个细胞合成生命体更是遥不可及了。
★封装在软件系统中的领域知识涉及到人类社会或人体的比例更少。
当前的绝大多数软件系统中和现实中有生命的“人”对应的类与其相关的逻辑所占比例是非常少的。封装复杂逻辑的类我们需要为之画出复杂状态机的类往往是“订单”、“设备”、“房间”等它们在现实中对应的是无生命的事物。
目前的软件系统关注较多的人相关的逻辑可能是“有权限”、“无权限”等等其他逻辑还没有能力或余力照顾。例如现实中男性很在意一名女性是否漂亮、健康、善良但有多少软件系统封装了这些逻辑呢
3系统
此处只讨论封装领域知识、有计算能力的信息系统它能将输入信息转成所需信息输出。
信息系统可以分为人脑系统和非人信息系统软件系统。 人的大脑可以看作一台计算机其中安装了许多信息系统。
例如输入是一张人脸输出是人的姓名用人脑中的“人脸识别系统”辨认还是用计算机中的“人脸识别系统”辨认本质是一样的。
注意“封装领域知识”必须把相关的领域知识变成自己的计算能力。
人在身上揣一本数学书或者大脑死记硬背这本数学书上的文字却没有能力运用其中知识解数学题那不算“封装领域知识”。
同理计算机里放了一本数学书的pdf文件也不算“封装领域知识”因为也没有能力运用其中知识解数学题。
★无论有没有系统封装这些领域知识这些领域知识都在那里。
还是用前面《“领域”的错误定义》的说法γ射线暴啪的一下人类没了图书馆的书还在那里。如果“把字刻在石头上”没准还能等来外星文明来阅读它们——参见阿瑟·克拉克的《星The Star》三体的“把字刻在石头上”应该来源于此。
4组织
人脑系统软件系统以及其他非信息系统可以组装成组织。
★无论是否组装成组织这些系统就在那里领域知识也封装在系统里。
5组织价值做某事 可见“组织做的事”和“领域”相隔如此之远而且中间各个环节都是多对多的映射。从“组织做的事”来的定义“领域”是非常不妥的。
关于系统、组织的更深入论述参见《软件方法》第9章。
给大家留几道题目
1. [单选]
可以把各种投资少、见效快、产量高、门槛低的领域驱动设计伪创新手法做进一款充满仪式感的工具用来帮助割韭菜有这方面需要的开发人员。
如果在开发这款工具时想寻找领域专家以下说法最合适的是
A) 典型的不想付出努力但又急需某个“方法”充门面的开发人员张三是领域专家。
B) 研究和批评领域驱动设计伪创新多年的潘加宇老师是领域专家。
C) UML三友之一James Rumbaugh是领域专家。
D) 伪创新不属于领域知识不存在领域专家。
2. [多选]
软件的“技术人员”在研究物理领域时发现有很多看起来差不多的用语例如高度、深度压力、压强重量、质量速度、加速度平衡力、相互作用力……
通用语言Ubiquitous Language是领域驱动设计革命性的创造和划时代的洞见之一。如果“技术人员”想发挥“通用语言”的威力用最少的思考来解决这些词语差异以下做法值得赞扬的有
A) 认真阅读物理专业书籍努力分辨这些用语之间的区别和联系并且做相应的测试题来检查自己的学习成果。
B) 把物理领域划分成若干限界上下文并定义A上下文中的速度相当于B上下文的加速度。
C) 兄弟们一起去轰趴一边饮酒作乐一边头脑风暴投票选出最能够凝聚团队的通用语言。
D) 找物理高考满分的高考状元请教一边问问题一边画类图来整理。
3. [多选]
很多革命性划时代领域驱动设计创新有投资少、见效快、产量高等特点。
以下选项的图形中有一些也向领域驱动设计学习它们是
A) B) C) D)