zoukankan      html  css  js  c++  java
  • 通用语言

    DDD理论学习系列(1)-- 通用语言

     

    1.引言

    在开始之前,我想我们有必要先了解以下DDD的主要参与者。因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是?
    DDD的主要参与者:领域专家+开发人员
    领域专家:精通业务的任何人。
    开发人员:开发+测试。
    领域专家擅长某个领域的知识,专注于交付的业务价值。
    开发人员则注重于技术实现。
    开发人员总是想着类、接口、方法、设计模式、架构等。以面向对象的编程思想进行思考,思考如何进行抽象、封装、继承、多态等。而领域专家对软件中的框架、持久化、数据库等没有概念,而这也就导致了他们之间交流的困难性。

    那怎么解决交流障碍这个问题呢?

    2. 通用语言

    抛开DDD而言,单从字面意思来理解,我们首先肯定先联想到作为世界使用最多的语言--英语。
    英语之所以能成为通用语言,我想无非是以下几方面:

    • 简单易学
    • 使用率高
    • 国际通用

    那DDD中通用语言又是怎样呢?
    首先它也同样要拥有【简单】的特性,这样才便于理解和传播。
    其次,它也要有【通用】、【使用率高】的特性,因为只有在软件开发的过程中,团队范围内所有的参与人员广泛使用,才能准确传递业务规则。

    通用语言是团队交流的基础上建立起来的,代码则是基于通用语言来进行业务表达的。

    3. 举个例子

    项目经理安排了一项任务给我:
    圣杰这个补丁处理下【可销控制】这个需求。
    听后,真是一脸懵逼,【可销控制】是什么鬼?

    这明显是专业术语,我不懂的专业术语。
    按照DDD对通用语言的定义,【可销控制】就不算通用语言。
    因为只有领域专家知道它的含义,开发人员一脸茫然。

    但通用语言是领域专家和开发人员一起创建的,所以我们开个需求会议,来梳理下专业术语背后的含义。

    可销控制的应用场景是:
    在ERP中,在做单时对销售员负责的客户进行范围控制。比如,A客户是销售员小李发展过来的,小李希望仅能自己负责对A客户的业务。

    这么一解释,是不是明白不少了。但是不是还有几点疑惑?

    • 可销范围如何配置?
    • 做什么单据时进行可销范围控制?
    • 如何进行可销控制?
    • 可销控制需不需要参数控制?

    经过讨论,得出以下结论:

    • 提供专门的【销售员-客户可销控制】界面进行销售员-客户映射数据配置。
    • 做销售订单单据时进行可销范围控制
    • 在录入销售员后,做单员在选择客户列表时,客户列表中仅显示可销范围配置的客户数据。
    • 提供【销售员-客户可销范围控制】系统参数,勾选后才进行可销范围控制。

    好了,这下需求理解个七八九了。
    原来可销控制就是销售员-客户销售范围控制。
    咱们用一句话来精简下这个需求:
    可销控制是指销售员所负责客户的范围控制,当勾选了【销售员-客户可销控制】参数后,在做销售订单录入客户数据时,客户列表仅能选择到在【可销控制】列表中为该销售员配置的客户。

    经过这么一说明,我们是不是已经理清了【可销控制】这个需求点。

    那这种通过团队交流达成共识的能够简单清晰准确传递业务规则的语言即可称为通用语言。

    4. 通用语言的价值

    就像上面所说的那样,通用语言的最大价值是解决了交流障碍问题,使领域专家和开发人员能够协同合作,从而能够确保业务需求的正确表达。
    另外,基于通用语言,开发人员能够开发出可读性更好的代码,从而将业务需求准确转化为代码设计。达到DDD的目标代码即设计,设计即代码。通俗的讲,也就是开发人员写的代码领域专家也能看懂。

  • 相关阅读:
    spring整合websocket通信
    Log4j学习
    Elasticsearch学习之ES节点类型以及各种节点的分工
    Elasticsearch 学习之提升性能小贴士
    Python奇技淫巧
    汉语拼音转换工具(Python 版)
    根据数据库的表结构的类型返回其对应的简写类型
    python的动态加载机制??
    计算二进制中的字符串的长度
    一个erlang游戏服务端
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/6834884.html
Copyright © 2011-2022 走看看