高内聚

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

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

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

好写单测的系统往往比不好写单测的系统更加健壮,如果一个系统大部分代码都可以写无 Mock 单测,那么它看起来就像左图一样,外部调用只是薄薄的一层,可以随意更换。 如果你的系统大部分代码都一定要 Mock 才能测试的话,或者根本无法测试的话,就像右图一样,说明你的业务根本就没有自己的核心逻辑,而是和各种外部调用缠绕在一起

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

领域模型

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

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

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

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

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

向心力

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

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

功夫在诗外

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

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

本文分享自微信公众号 - 码农戏码(coder-game),作者:朱先生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图解高内聚与低耦合

    模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.

    用户1216491
  • 彻底弄懂高内聚与低耦合

    模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决。

    java思维导图
  • 低耦合高内聚 原则的应用

    这次主要是分享对软件设计中的“低耦合、高内聚”原则的一些个人体会,通过lorawan代码等实例分析,让大家对这个设计思想有一些具象的理解。

    twowinter
  • 彻底弄懂高内聚与低耦合

    模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决。

    lyb-geek
  • #PY小贴士# 什么是“高内聚,低耦合”

    听起来有点玄乎,用大白话来讲,大致就是:写代码要分模块,就像搭积木,一个功能一个模块,每个模块做好一件事,不同模块之间尽量不要互相依赖。这样代码会更简单,易于扩...

    Crossin先生
  • 分布式系统关注点:高内聚低耦合

    作为被通知人,如果在你的现实工作中也发生了类似事件,我相信哪怕嘴上不说,心里也会有不少想法和抱怨:“md,改的是你,我也要发布,好冤啊!”。

    程序猿DD
  • 大型项目架构搭建_高内聚、低耦合(1)

    软件开发中的项目的架构的终极目标就六个字: 高内聚、低耦合; 架构搭建好了,后期可维护性才能提高,在这基础上,如果还想提高项目的高效性,就只能从算法着手 如果项...

    汤高
  • 图解高内聚与低耦合,傻瓜都能看懂!

    模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.

    Java技术栈
  • 用大白话告诉你什么是低耦合|高内聚

            首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高。在软件中内聚...

    不会飞的小鸟
  • 分布式系统关注点(13)——「高内聚低耦合」详解

    作为被通知人,如果在你的现实工作中也发生了类似事件,我相信哪怕嘴上不说,心里也会有不少想法和抱怨:“md,改的是你,我也要发布,好冤啊!”。

    Zachary_ZF
  • 双机热备工作模式及高内聚低耦合架构解释

    双机热备份技术是一种软硬件结合的较高容错应用方案。 该方案是由两台服务器系统和一个外接共享磁盘阵列柜 ( 也可没有,而是在各自的服务器中采取 RAID 卡 ) ...

    洗尽了浮华
  • 你们要的动图来了:2张动图快速理解高内聚与低耦合

    模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.

    java进阶架构师
  • 遵循面向对象设计原则,设计出高内聚低耦合可扩展模块

    所谓易,“变易”,“简易”,“不易”,就是要告诉我们如何从变化中 抽出 不变的 —— 选择一个正确的抽象视角。七大基本原则介绍完毕,很空洞,需要联系代码仔细体会...

    wuweixiang
  • 「JAVA」面向对象三大特征:封装、继承、多态,以高内聚、低耦合为目标

    面向对象的最终目的是要构建强健、安全、高效的项目,也就是要实现项目的高内聚和低耦合:

    老夫编程说
  • 软件工程期末考试复习(四) 设计原理高内聚,低耦合的系统有什么好处呢? 面向数据流的设计方法

    总体设计的基本且的就是回答“概括地说,系统应该如何实现”这个问题。因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素程序、文件...

    用户2417870
  • 高级聚类

    FuzzyKmeans 在对数据进行聚类时,最常用的方法应该是kmeans,但是kmean只能保证每一条待聚类的数据划分到一个类别,针对一条数据可以被划分到多个...

    xiangzhihong
  • ACCESS高级--域聚合函数

    通过域聚合函数,可以从整个数据集中提取并聚合统计信息。其与聚合函数的区别在于,聚合函数会在求值之前先对数据集进行分组,而域聚合函数对整个数据集求值。因此,域聚合...

    披头
  • 软件设计原则之内聚、耦合类型剖析与内聚度、耦合度比较

    高内聚、低耦合是我们在软件设计过程中必须遵循的一个重要原则,在整个软件工程中占有很大的比重。而对于内聚和耦合你还是仅仅局限于“高内聚,低耦合”的模糊概念吗?那你...

    白鹿第一帅
  • Linux内核高端内存

    x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。

    233333

扫码关注云+社区

领取腾讯云代金券