DDD理论学习系列(1)-- 通用语言
1.引言在开始之前,我想我们有必要先了解以下DDD的主要参与者。因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? 那怎么解决交流障碍这个问题呢? 2. 通用语言抛开DDD而言,单从字面意思来理解,我们首先肯定先联想到作为世界使用最多的语言--英语。
那DDD中通用语言又是怎样呢? 通用语言是团队交流的基础上建立起来的,代码则是基于通用语言来进行业务表达的。 3. 举个例子项目经理安排了一项任务给我: 这明显是专业术语,我不懂的专业术语。 但通用语言是领域专家和开发人员一起创建的,所以我们开个需求会议,来梳理下专业术语背后的含义。 可销控制的应用场景是: 这么一解释,是不是明白不少了。但是不是还有几点疑惑?
经过讨论,得出以下结论:
好了,这下需求理解个七八九了。 经过这么一说明,我们是不是已经理清了【可销控制】这个需求点。 那这种通过团队交流达成共识的能够简单清晰准确传递业务规则的语言(可以是文字、图片等)即可称为通用语言。 4. 通用语言的价值就像上面所说的那样,通用语言的最大价值是解决了交流障碍问题,使领域专家和开发人员能够协同合作,从而能够确保业务需求的正确表达。 5.通用语言的代码表达既然开发人员也要基于通用语言进行代码开发,那代码如何体现通用语言呢?
上面这个用例就是基于通用语言的用例,简单清楚的说明了业务规则。 boolanthentic=false; Useruser=_userRepository().FindUserByTenantIdAndUserName(tenantId,userName);if(user!=null) { authentic=user.IsAuthentic(password); }returnauthentic; 这段代码完全不能反应通用语言,主要存在以下问题:
知道问题后,我们可以讲代码略做改动: boolanthentic=false; Tenanttenant=_tenantRepository.FindTenantById(tenantId);//检查租户是否激活if(tenant!=null&&tenant.IsActive){ Useruser=_userRepository.FindUserByTenantIdAndUserName(tenantId,userName);if(user!=null) { authentic=tenant.Authenticate(user,password);//租户对用户进行认证} }returnauthentic; 以上代码虽然也不是最终结果,但至少对通用语言进行了体现。通读代码,就能明白业务用例,体现代码即设计这一思想。 阅罢此文,如果您觉得本文不错并有所收获,请【打赏】或【推荐】,也可【评论】留下您的问题或建议与我交流。 作者:『圣杰』 出处:http://www.cnblogs.com/sheng-jie/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。 分类: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |