领域、系统和组织-《实现领域驱动设计》中译本评点-第2章(4)

相关链接

DDD领域驱动设计批评文集>>

汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第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) 

 

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/768686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat介绍,Tomcat服务部署

目录 一、Tomcat 介绍 二、Tomcat 核心技术和组件 2.1、Web 容器:完成 Web 服务器的功能 2.2、Servlet 容器,名字为 catalina,用于处理 Servlet 代码 2.3、JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码 Tomcat 功能组件…

Window全网解析网站下载视频

全网解析网站下载视频 介绍m3u8格式cbox格式 解析视频下载的方法方法一解析视频下载视频 方法二老王浏览器下载使用浏览器解析下载视频 总结 介绍 今天分享一下如何解析网页中的视频进行下载。通常情况下我们打开的某某网站的视频是不提供下载接口的,甚至说你下载了…

ClickHouse--11--物化视图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.物化视图什么是物化视图? 1.1 普通视图1.2 物化视图1.3 优缺点1.4 基本语法1.5 在生产环境中创建物化视图1.6 AggregatingMergeTree 表引擎3.1 概念3.2 Aggregat…

面试算法-87-分隔链表

题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head [1,4,3,2,5,2], x …

【JAVA】通过JAVA实现用户界面的登录

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-wyCvaz0EBNwHcwsi {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

Linux系统——硬件命令

目录 一.网卡带宽 1.查看网卡速率——ethtool 网卡名 2.查看mac地址——ethtool -P 网卡名 二、内存相关 1.显示系统中内存使用情况——free -h 2.显示内存模块的详细信息——dmidecode -t memory 三、CPU相关 1.查看CPU架构信息——lscpu 2.性能模式 四、其他硬件命…

C语言字节对齐关键字#pragma pack(n)的使用

0 前言 在进行嵌入式开发的过程中,我们经常会见到对齐操作。这些对齐操作有些是为了便于实现指针操作,有些是为了加速对内存的访问。因此,学习如何使用对齐关键字是对于嵌入式开发是很有必要的。 1 对齐规则 1.0 什么叫做对齐 众所周知&a…

牛客NC170 最长不含重复字符的子字符串【高频 中等 map、滑动窗口 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7 思路 用一个hashmap记录每个字母的index如果这个字母已经在map里了说明已经有重复了这样就更新看这个字母上次出现的index需要注意的是这种情况:“bacbca”这里的a…

PCB中常用电子器件封装学习——【一网打尽】

‘ 上图是这个世界上大概所有的封装种类,当然我们日常硬件电路设计肯定用不到这么多,接下来我将介绍几种工程上常用的封装,配以图片方便大家理解学习。在电子器件选型的时候,避免选择到一些非常难以焊接的封装电子器件。

使用amd架构的计算机部署其他架构的虚拟机(如:arm)

1 下载quem模拟器 https://qemu.weilnetz.de/w64/2 QEMU UEFI固件文件下载(引导文件) 推荐使用:https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd3 QEMU 安装 安装完成之后,需要将安装目录添加到环境变…

Jenkins的快速入门

文章目录 一、Jenkins是什么?二、Jenkins安装和持续集成环境配置1.持续集成流程说明2.Gitlab代码托管服务器安装Gitlab简介:Gitlab安装Gitlab的使用切换中文添加组创建用户将用户添加到组创建项目idea中代码上传Gitlab 3.Jenkins持续集成环境服务器安装J…

华为北向网管NCE开发教程(5)打包org.omg.CosNotification找不到

1问题描述 在IDE中,代码能正常运行,但是打包的时候,会抱不到一些类 2问题原因 导入的本地包中,能在IDE中找到,但是在使用maven打包时,maven找不到这些依赖包 3解决办法 将依赖包通过maven安装到maven…

通过 Socket 手动实现 HTTP 协议

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

[Python人工智能] 四十四.命名实体识别 (5)利用bert4keras构建Bert-CRF实体识别模型(实体位置)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…

红外遥控器的使用和详细解释

infrared.c #include "infrared.h"/* 红外 --- PA8*/void Infrared_Init(void) {GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//使能SYSCFG时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, E…

34.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-登录数据包的监视与模拟

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:33.游戏登录数据…

c#绘制图形

窗体工具控件 如果选纹理 ,需要在ImageList中选择图像(点击添加选择图片路径) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.…

第二十章 TypeScript(webpack构建ts+vue3项目)

构建项目目录 src-- main.ts-- App.vue--shim.d.tswebpack.config.jsindex.htmlpackage.jsontsconfig.json 基础构建 npm install webpack -D npm install webpack-dev-server -D npm install webpack-cli -D package.json 添加打包命令和 启动服务的命令 {"scripts…

Spring相关框架八股

单例bean是线程安全的吗? AOP 事务失效 Bean生命周期 Bean循环依赖解决 MVC执行流程 自动装配原理 Spring常见注解 SpringMVC注解 SpringBoot注解 MyBatis执行流程 MyBatis延迟加载 MyBatis缓存 SpringCloud五大组件 注册中心Nacos、Eureka 负载均衡Ribbon 服务雪崩…

Apache HBase(二)

一、Apache HBase 1、HBase Shell操作 先启动HBase。再进行下面命令行操作。 1、进入HBase客户端命令行 [rootnode1 hbase-3.0.0]# bin/hbase shell SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/export/server/hadoop-3.3.6/…