领域驱动设计(2)怎么使用沟通

废话

沟通的重要性:沟通很重要,不论在生活中,还是工作中沟通处理不好,我想为人处事这块肯定有问题.LZ接触社会比较早,做过焊工、销售、跑过业务...,一路走来在沟通上同样的也吃过很多的亏,受了不少的不会沟通的害处。我在做业务的时候常常用一句话告诫自己“一句话能死,一句话能活”,可能因为一句话业务活了,可能一句话面试活了,可能一句话感情有了....可能性很多,其实这可能的情况都是机遇只不过有大有小罢了.

领域驱动设计中的沟通:

有很多的项目是处于这一种情况,甲方(也就是领域驱动中的专家)不懂技术,不懂什么是开发,没有开发的思想,唯一知道的是我想要什么的系统、功能或产品。因为领域驱动提倡的是开发人员和领域专家有交流和沟通的,那么在平常开发的过程中常常会有这样的事情发生,业务人员和甲方沟通过业务之后,把需求带了回来,开发人员根据对甲方业务需求的分析进行设计开发,功能完成后,甲方验收的时候发现不是自己想要的结果,这样的后果在做项目的角度上无疑是非常严重的,不仅仅是延长了项目的完工时间,同样也打压了团队的气氛以及积极心态,为什么会造成这样的事情的发生,会不会是甲方描述的不清楚,也或者说是不是业务描述在传递的过程中有丢失...等等@可能有些人不认同了,为什么没有形成需求文档让用户签字确认等一些正规操作,这里举例说明的问题是相互沟通,相互了解。事实上一些好产品经理、团队会和用户进行深入的业务探讨,往往针对一个需求,你来我往的战斗几轮后才会产出需求、不管是反驳还是提出各种疑问或者是使用各种方法,如头脑风暴、用户故事、原型图引导。。。等手段,这样的深层次的沟通才会产出更加准确的需求,以此来减少需求的更改,也为项目的顺利的验收埋下了因,而不是签字确认需求为以后甩锅做准备。

在这种深层次沟通的情况下我们(乙方)讲渐渐的融入进甲方的领域中,这个过程中我们积累了很多无形的财富,比如在公共语言上(在领域驱动设计中称为:UBIQUITOUS  LANGUAGE 通用语言)将达成一致,当甲方使用他们自己的行话进行沟通的时候我们将不再迷茫,在种情况下进行沟通我们便可绘制出更加准确的模型,模型与模型之间的关系构建出了业务的规则,一些词和短语也将反映出模型的含义。当所有的项目干系人都使用基于模型的语言来进行沟通交流,模型语言使用的越普遍,理解就越容易。切记的是在构建模型的过程中使用的通用语言应避免那些绕口、语义表述不正确的词或语句,如果发现需尽快找到替代的词或语句,通用语言越普通越贴近生活越容易理解。

举例说明领域驱动设计语言如何使用

以下会出两个例子做一个对比:

(1)没有使用领域语言是这样沟通的

新建四张表

一个简单的用户请求领域

在沟通过程中一般是这样沟通的:

用户:当我的销售地区(Area)发生更改的时候,需要重新制定销售方案吗?

开发人员:是的销售区域发生改变的时候我们需要删除销售方案表(SalesScheme)中的所有有关该地区的方案信息。然后将新的地区的信息通过服务去删除然后重新制定新地区的销售方案信息.

用户:明白了,你们是删除数据行项目,然后去插入行项目,但是如果我刚开始,我只知道哪些销售地区需要需要放弃,但是我还不知道替换成哪些销售地区怎么办呢,毕竟每个地区销售的策略是不一样的。

开发人员:这样也没有问题,服务对数据的操作很容易,咱们先清除放弃的销售地区,等到找到替换的销售地区我们再去添加也是一样的。

用户:可以,因为我们每次的制定一份销售计划需要花费很大的人力物力,一般情况下对于销售方案部门不想去更改。

开发人员:我们通过销售方案服务查询出要放弃地区的销售方案信息进行列表显示,然后与新地区的销售方案进行一个对比,看看是否有没有制定新的销售方案的必要。

用户:我明白了。

现在很多开发团队使用的对话方案,看起来完成用户的需求也是没有问题的。

用领域模型进行讨论:

用户:当我的Area(销售地区)发生更改的时候,需要重新制定销售方案吗?

开发人员:是的Aera(销售地区)发生改变的时候我们需要删除SalesScheme(销售方案表)中的所有有关该Aera(销售地区)的方案信息。然后将新的Aera的Scheme(方案)信息通过SalesSchemeService(销售方案服务)去删除然后重新插入新的销售方案信息.到SalesScheme(销售方案表)中。

用户:明白了,你们是删除SalesScheme(销售方案表)行项目,然后去插入行项目,但是如果我刚开始,我只知道哪些Aera(销售地区)需要需要放弃,但是我还不知道替换成哪些Aera(销售地区)怎么办呢,毕竟每个地区销售的策略是不一样的。

开发人员:这样也没有问题,SalesSchemeService(销售方案服务)对数据的操作很容易,咱们先清除放弃的Aera(销售地区),等到找到替换的Aera(销售地区)我们再去添加也是一样的。

用户:可以,因为我们每次的制定一份Scheme(方案)需要花费很大的人力物力,一般情况下对于Scheme(方案)不想去更改。

开发人员:我们通过SalesSchemeService(销售方案服务)查询出要放弃Aera(销售地区)的Scheme(方案)信息进行列表显示,然后与新地区的Scheme(方案)进行一个对比,看看是否有没有制定新的Scheme(方案)的必要。

用户:我明白了。

这是模拟针对同一个业务需求用不同的方式进行的相互讨论,有人会想了你这不是换了一种交流方式吗?我们开发设计上也是这么做的啊,事实上很多公司都在这么做,但是因为一些特殊的原因导致我们开发人员是接触不到甲方的,大多数的场景都是通过项目经理或者产品经理给我们描述,其实换一种角度,项目经理/产品经理把甲方当做领域专家,开发人员也可以把项目经理/产品经理当做领域专家,其实这样做也避免了很多摩擦风险,把很多愉快和不愉快的事情控制在了项目内部,但是在项目内部使用领域的UBIQUITOUS  LANGUAGE(通用语言)去沟通避免了对同一个业务不同的人产生不同的理解,开发人员不在使用自己的语言去沟通去设计,使用同一种语言去沟通,是开发人员之间省去了不必要的翻译工作,在和项目组其他干系人去沟通的时候很少会出现(听不懂、你再说一遍、等一下我记一下、来麻烦重新描述一下、你看我这样理解对不对呢、等等)这样的情况,因为使用同一种语言描绘出的业务,大家都会明白的,这样对执行效率、准确性以及代码质量会有很大的提升。就是相互之间请别人帮忙查看一下(code review)代码的时候也会方面很多。通用语言使用的越多记忆越牢固。

在我的真正项目经历中令我印象最深的一次是,我们的主系统,是有很多个子系统组成的,我们项目组负只责其中一个系统模块,同时参与该系统的还有多个团队,所有子系统的功能性测试已经完成,要进入流程性测试的时候,再一次会议上发生了这样的事情,甲方在很卖力讲测试业务流程的时候我很惊奇的发现在场的大多数人员都处于一个懵逼状态,当然也包括我(哈哈)举个例子:在做一个反向订单业务的时候我们在项目中称为“反向订单”,到甲方这里称为“散件入库”这只是其中的一个,总之当时给我的感觉就是我是不是进错会议室了。

当然模型的制定不会是那么顺利的,这个过程相当于让甲方学习了一门新的语言了,但是如果在项目的一开始我们就带入模型的概念,从文档,原型、示例图、PPT、各种图、会议上等都带入模型的概念,慢慢的也都习惯了,时间长了大家就都会认为这是合理的了,时间能消磨很多棱角的。

在第二个示例(用领域模型进行讨论:)中我们很明显的可以发现在沟通的过程中使用了很多的模型中的关键词或者短语进行着沟通,其实精简模型的最有效的方式就是沟通,再通过沟通的过程中尽可能多的使用模型中的术语,这样我们才有可能找出更多的模型变化,然后找出一个最精简的变化去更新模型,其实这样的好处不仅仅是对模型的精简,也是对程序设计,对代码的精简,也就是说在我们日常的沟通过程中其实已经在对怎么做出高质量的产品做着研究或者是改变的、这个过程也是在对代码做着不断的重构动作(语言的使用十分重要)

最近一两个月将持续更新领域驱动设计。有偏差的望大家指出,相互学习。

有不足之处 希望大家指出相互学习,

                                   本文原创:转载请注明出处 谢谢!

转载于:https://www.cnblogs.com/szlblog/p/9103984.html

领域驱动设计(2)怎么使用沟通相关推荐

  1. 一文理解 DDD 领域驱动设计!

    来源丨SpringForAll社区 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Softwa ...

  2. 领域驱动设计,为何死灰复燃?

    作者简介 张逸,曾先后就职于中兴通讯.惠普 GDCC.中软国际.ThoughtWorks 等大型中外企业,任职角色为高级软件工程师.架构师.技术总监.首席咨询师. 一.领域驱动设计为何又死灰复燃焕发青 ...

  3. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.1节模式:Ubiquitous Language...

    本节书摘来自异步社区<领域驱动设计:软件核心复杂性应对之道(修订版)>一书中的第2章,第2.1节模式:Ubiquitous Language,作者[美]埃里克•埃文斯(Eric Evans ...

  4. DDD领域驱动设计基本理论知识总结

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...

  5. 初探领域驱动设计(1)为复杂业务而生

    概述 领域驱动设计也就是3D(Domain-Driven Design)已经有了10年的历史,我相信很多人或多或少都听说过这个名词,但是有多少人真正懂得如何去运用它,或者把它运用好呢?于是有人说,DD ...

  6. 初学者浅谈我对领域驱动设计(DDD)的理解

    一.为什么要学习领域驱动设计 如果你已经设计出了优雅而万能的软件架构,如果你只是想做一名高效的编码程序员,如果你负责的软件并不复杂,那你确实不需要学习领域驱动设计. 如果用领域驱动设计带来的收获: 能 ...

  7. 领域驱动设计(DDD:Domain-Driven Design)

    领域驱动设计(DDD:Domain-Driven Design) Eric Evans的"Domain-Driven Design领域驱动设计"简称DDD,Evans DDD是一套 ...

  8. 【吐血推荐】领域驱动设计学习输出

    一.Hello DDD 刚开始接触学习「DDD - 领域驱动」的时候,我被各种新颖的概念所吸引:「领域」.「领域驱动」.「子域」.「聚合」.「聚合根」.「值对象」.「通用语言」.....总之一大堆有关 ...

  9. 领域驱动设计在互联网业务开发中的实践

    前言 至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven Design,简称DDD).在互联网开 ...

最新文章

  1. 【 C 】用动态数组实现堆栈
  2. java 循环标记_深入浅析Java 循环中标签的作用
  3. iWindowsMobile Launches Updated ZoomBoard
  4. 可持久化平衡树(FHQ Treap)
  5. JavaScript自学笔记(1)---表单验证,let和const,JSON文件
  6. 【uC/OS-II】笔记1----入门
  7. Python适合初学者入门
  8. 路漫漫其修远兮,吾要上下左右前后而求索
  9. 1、爱因斯相对论(狭义相对论)
  10. Java: JavaMail 初试(一)
  11. (模电笔记二 By Multisim)波特图(Bode Plotter)幅频特性相频特性详解
  12. 离散数学自反与反自反
  13. 迭代局部搜索算法(Iterated local search)
  14. 化妆品公司mysql_化妆品网站销售管理系统的设计与实现(SSH,MySQL)(含录像)
  15. NYOJ 无主之地1
  16. 这些你必须知道的 Linux 技能
  17. 黄道、黄道平面、黄赤交角、正午太阳高度
  18. 【新知实验室 陈林】
  19. WMCTF-RE--WMware
  20. 传感器的应用/SurfaceView/制作简单的指南针

热门文章

  1. mongodb[三] 文档操作:插入、更新、删除
  2. dojo发布者订阅者模式(topic.publish/topic.subscribe)
  3. 在 Java 项目中打印错误日志的正确姿势,排查问题更方便,非常实用!
  4. 这波操作,会把你的中间件架构带到另一个Level
  5. 你确定你真的喜欢编程吗??
  6. Consul和服务网格的智能网络
  7. GOPATH与工作空间
  8. 6.MYSQL视图的使用和管理
  9. Python eval函数用法简介
  10. 皖南医学院2020C语言试卷,安徽继续教育在线 - 皖南医学院