高内聚

简介: 最近一季度KPI中,增加了一项单元测试覆盖率在之前工作经历中,也有过类似情况,老板开始关注单元测试情况了,就会加上覆盖率这个绩效指标,不管以前如何应对,还是再次关注了一些对于测试的文章,TDD虽然没有大流行,但这个概念还是常被人提起

最近一季度KPI中,增加了一项单元测试覆盖率

在之前工作经历中,也有过类似情况,老板开始关注单元测试情况了,就会加上覆盖率这个绩效指标,不管以前如何应对,还是再次关注了一些对于测试的文章,TDD虽然没有大流行,但这个概念还是常被人提起

image.png

这张图是在一篇文章中看到的

好写单测的系统往往比不好写单测的系统更加健壮,如果一个系统大部分代码都可以写无 Mock 单测,那么它看起来就像左图一样,外部调用只是薄薄的一层,可以随意更换。

如果你的系统大部分代码都一定要 Mock 才能测试的话,或者根本无法测试的话,就像右图一样,说明你的业务根本就没有自己的核心逻辑,而是和各种外部调用缠绕在一起

这张图让我有很多的感触,值得整理一下思绪

领域模型

这张图跟整洁架构图特别像

image.png

中心是核心的业务逻辑,依赖路径是由外向内,外围千变万化,但内核是不变的

不管是设计,还是编码,亦或是UT,都需要这样的思路;需要高内聚,核心业务代码不能分散,集中,有中心脉络

我们有时过多注重了技术层次,比如MVC,我们更多的是关注各层技术变化速率而分层,而忽略了业务层次变化

结合之前分析的《DDD分层》,也应该是三层,但不是MVC,面是是输入、领域、输出三层,类似端口适配器架构

向心力

这可能跟图的形状有关,因为是圆形。所以想到了向心力这个词,业务逻辑要内聚,单元测试也要内聚,当然了,单元测试的内聚是由于业务逻辑的内聚。

而这种高内聚,正合了向心力。没有向心力就是一群散沙,设计是,架构是,团队亦是

功夫在诗外

以前还写过一篇《功夫在诗外》,为了专业有所精进,就去看了很多专业无关的书,似乎方向搞错了,灵感不是平白无故地出现的,而是长年持续思考累积,再因为偶尔一件诗外之事激发,贯穿了之前的整个思考过程

以前看整洁架构那张图怎么没有如此些感悟呢,因为作为一名程序身在其中,但当看到测试内容时,因不是测试人员,身在事外看事,就有了感悟,所以功夫不能完全花费在诗外,也不能离诗过远,才能带来灵感

目录
相关文章
|
存储 监控 安全
Linux存储安全:保护你的数据免受威胁
【8月更文挑战第18天】在数字化时代,数据安全至关重要。Linux以稳定与安全著称,但仍需强化存储保护。本文概览Linux存储安全,涵盖物理安全、文件系统选择、数据加密技术如LUKS与eCryptfs、精细访问控制及审计监控等最佳实践,辅以定期更新、网络隔离、安全协议运用、备份及用户培训,全方位守护数据安全。通过这些措施,可有效防御未授权访问与数据损失,确保信息资产安全无忧。
211 1
|
12月前
用html+javascript打造公文一键排版系统1:设计界面
用html+javascript打造公文一键排版系统1:设计界面
|
应用服务中间件 nginx Docker
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(1)
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(1)
|
vr&ar
AIGC 3D宇宙问题之混合显示的定义如何解决
AIGC 3D宇宙问题之混合显示的定义如何解决
67 0
|
编解码 物联网 测试技术
使用 PAI-Blade 优化 Stable Diffusion 推理流程(二)
本篇我们继续介绍使用 PAI-Blade 优化 LoRA 和 Controlnet 的推理流程。相关优化已经同样在 registry.cn-beijing.aliyuncs.com/blade_demo/blade_diffusion镜像中可以直接使用。同时,我们将介绍 Stable-Diffusion-webui 中集成 PAI-Blade 优化的方法。
|
存储 弹性计算 运维
阿里云无影云电脑具体价格
阿里云无影云电脑具体价格可以免费使用3个月
405 0
|
弹性计算 容灾 网络安全
阿里云服务器专有网络是什么?可用区随机怎么选?
2023阿里云服务器专有网络是什么?可用区随机怎么选?阿里云服务器网络及可用区,网络指的是专有网络VPC,可用区是指同一个地域下网络和电力相互独立的区域,专有网络是用户在云端的私有网络,专有网络之间逻辑上彻底隔离,用户可以在专有网络上设置IP地址段、交换机和路由表等。阿里云百科来详细说下什么是专有网络以及可用区选择方法:
442 0
阿里云服务器专有网络是什么?可用区随机怎么选?
|
SQL 关系型数据库 MySQL
【数据库】MySQL表的增删改查(基础命令详解)
【数据库】MySQL表的增删改查(基础命令详解)
|
存储 SQL 自然语言处理
MySQL索引简介 - InnoDB和MyISAM索引模型
MySQL索引简介 - InnoDB和MyISAM索引模型
176 0
|
JSON PHP 数据格式
【python】or【php】网页中字符编码转换,将反斜杠u \u字符串转为unicode/utf8
【python】or【php】网页中字符编码转换,将反斜杠u \u字符串转为unicode/utf8
285 0