DDD理论学习系列(1)-- 通用语言
1.引言
在开始之前,我想我们有必要先了解以下DDD的主要参与者。因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是?
DDD的主要参与者:领域专家+开发人员
领域专家:精通业务的任何人。
开发人员:开发+测试。
领域专家擅长某个领域的知识,专注于交付的业务价值。
开发人员则注重于技术实现。
开发人员总是想着类、接口、方法、设计模式、架构等。以面向对象的编程思想进行思考,思考如何进行抽象、封装、继承、多态等。而领域专家对软件中的框架、持久化、数据库等没有概念,而这也就导致了他们之间交流的困难性。
那怎么解决交流障碍这个问题呢?
2. 通用语言
抛开DDD而言,单从字面意思来理解,我们首先肯定先联想到作为世界使用最多的语言--英语。
英语之所以能成为通用语言,我想无非是以下几方面:
- 简单易学
- 使用率高
- 国际通用
那DDD中通用语言又是怎样呢?
首先它也同样要拥有【简单】的特性,这样才便于理解和传播。
其次,它也要有【通用】、【使用率高】的特性,因为只有在软件开发的过程中,团队范围内所有的参与人员广泛使用,才能准确传递业务规则。
通用语言是团队交流的基础上建立起来的,代码则是基于通用语言来进行业务表达的。
3. 举个例子
项目经理安排了一项任务给我:
圣杰这个补丁处理下【可销控制】这个需求。
听后,真是一脸懵逼,【可销控制】是什么鬼?
这明显是专业术语,我不懂的专业术语。
按照DDD对通用语言的定义,【可销控制】就不算通用语言。
因为只有领域专家知道它的含义,开发人员一脸茫然。
但通用语言是领域专家和开发人员一起创建的,所以我们开个需求会议,来梳理下专业术语背后的含义。
可销控制的应用场景是:
在ERP中,在做单时对销售员负责的客户进行范围控制。比如,A客户是销售员小李发展过来的,小李希望仅能自己负责对A客户的业务。
这么一解释,是不是明白不少了。但是不是还有几点疑惑?
- 可销范围如何配置?
- 做什么单据时进行可销范围控制?
- 如何进行可销控制?
- 可销控制需不需要参数控制?
经过讨论,得出以下结论:
- 提供专门的【销售员-客户可销控制】界面进行销售员-客户映射数据配置。
- 做销售订单单据时进行可销范围控制
- 在录入销售员后,做单员在选择客户列表时,客户列表中仅显示可销范围配置的客户数据。
- 提供【销售员-客户可销范围控制】系统参数,勾选后才进行可销范围控制。
好了,这下需求理解个七八九了。
原来可销控制就是销售员-客户销售范围控制。
咱们用一句话来精简下这个需求:
可销控制是指销售员所负责客户的范围控制,当勾选了【销售员-客户可销控制】参数后,在做销售订单录入客户数据时,客户列表仅能选择到在【可销控制】列表中为该销售员配置的客户。
经过这么一说明,我们是不是已经理清了【可销控制】这个需求点。
那这种通过团队交流达成共识的能够简单清晰准确传递业务规则的语言即可称为通用语言。
4. 通用语言的价值
就像上面所说的那样,通用语言的最大价值是解决了交流障碍问题,使领域专家和开发人员能够协同合作,从而能够确保业务需求的正确表达。
另外,基于通用语言,开发人员能够开发出可读性更好的代码,从而将业务需求准确转化为代码设计。达到DDD的目标代码即设计,设计即代码。通俗的讲,也就是开发人员写的代码领域专家也能看懂。
DDD理论学习系列(1)-- 通用语言的更多相关文章
- DDD理论学习系列(5)-- 统一建模语言
DDD理论学习系列--案例及目录 1.引言 上一节讲解了领域模型,领域模型主要是将业务中涉及到的概念以面向对象的思想进行抽象,抽象出实体对象,确定实体所对应的方法和属性,以及实体之间的关系.然后将这些 ...
- DDD理论学习系列(2)-- 领域
DDD理论学习系列目录 1. 引言 领域一词,主要有以下两个意思: 一国主权所达之地. 学术思想或社会活动的范围. 不管是指国家的主权范围也好还是学术活动范围,都是在讲一个范围,一个界限. 比如我们常 ...
- DDD理论学习系列(4)-- 领域模型
DDD理论学习系列目录 1.引言 我们还是先来拆词理解,领域模型可以拆为"领域"和"模型"二词. 领域:按照我们之前的文章的理解,DDD中的领域是指软件系统要解 ...
- DDD理论学习系列(6)-- 实体
DDD理论学习系列--案例及目录 1.引言 实体对应的英语单词为Entity.提到实体,你可能立马就想到了代码中定义的实体类.在使用一些ORM框架时,比如Entity Framework,实体作为直接 ...
- DDD理论学习系列(7)-- 值对象
DDD理论学习系列--案例及目录 1.引言 提到值对象,我们可能立马就想到值类型和引用类型.而在C#中,值类型的代表是strut和enum,引用类型的代表是class.interface.delega ...
- DDD理论学习系列(8)-- 应用服务&领域服务
DDD理论学习系列--案例及目录 1. 引言 单从字面理解,不管是领域服务还是应用服务,都是服务.而什么是服务?从SOA到微服务,它们所描述的服务都是一个宽泛的概念,我们可以理解为服务是行为的抽象.从 ...
- DDD理论学习系列(9)-- 领域事件
DDD理论学习系列--案例及目录 1. 引言 A domain event is a full-fledged part of the domain model, a representation o ...
- DDD理论学习系列(12)-- 仓储
DDD理论学习系列--案例及目录 1. 引言 DDD中Repository这个单词,主要有两种翻译:资源库和仓储,本文取仓储之译. 说到仓储,我们肯定就想到了仓库,仓库一般用来存放货物,而仓库一般由仓 ...
- DDD理论学习系列(13)-- 模块
DDD理论学习系列--案例及目录 1. 引言 Module,即模块,是指提供特定功能的相对独立的单元.提到模块,你肯定就会想到模块化设计思想,也就是功能的分解和组合.对于简单问题,可以直接构建单一模块 ...
- DDD理论学习系列——案例及目录
目录 DDD理论学习系列(1)-- 通用语言 DDD理论学习系列(2)-- 领域 DDD理论学习系列(3)-- 限界上下文 DDD理论学习系列(4)-- 领域模型 DDD理论学习系列(5)-- 统一建 ...
随机推荐
- 梳理下Cordova的热更新
公司的大部分都是Hybrid 产品,也就是混合开发,所以比较重要的一个核心功能就是热更新了. 做这个功能的时候中间碰到不少坑,记录一下,比较简单,大致思想就是从服务器拉取JS文件替换掉本地对应文件 之 ...
- 关于php的flush在本机正常在服务器不灵的问题
这个问题网上很多,我就不重复那些了. 我的是关于进度条的应用.我最后遇到的问题是,在本机swampserver环境下的输出缓存很快,但是到了服务器上就是一段一段的了.我的服务器是Web服务器是IIS. ...
- 当git上文件大小写重命名的修改时(git大小写敏感/默认不敏感),如何提交
git默认是大小写不敏感!!! 加了感叹号是什么意思呢,意思就是这本身就是一个坑,本人使用的IDE是idea(网上说Eclipse可以避开问题),这个IDE本身就集成了git,但是如果要在termin ...
- Android Weekly Notes Issue #249
Android Weekly Issue #249 March 19th, 2017 Android Weekly Issue #249 本期内容包括: 一个设计的实现Demo讨论; Kotlin的C ...
- js,jq获取元素位置属性及兼容性写法
网页被卷起来的高度/宽度 document.documentElement.scrolltop //火狐 和 其他浏览器 document.body.scrolltop //ie,谷歌浏览器和没有 ...
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- UT源代码123
(3)设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Cellp ...
- 查找及修改日程管理系统中的bug
1.Java没有分包都糅合在一起 2.在登录界面,没有输入账号密码,点击登录按钮时程序会崩溃,需要给给用户名和密码添加Toast (注:由于程序没有运行出来,所以是搭档孙刘兰的截图) 3.Regist ...
- 老李分享:loadrunner操作mysql数据库
老李分享:loadrunner操作mysql数据库 在poptest测试开发工程师就业培训的课程中,针对一套商业系统进行性能测试,目标是mysql后台数据库的负载能力,在这里我把测试代码 ...
- hive 动态分区数设置
当对hive分区未做设置时,报错如下: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: ...