软件设计的目标是创建适合人类思维的切片分块 - KentBeck


软件设计的目标是创建适合人类思维的块或切片。软件一直在增长,但人类的思维会达到极限,因此,如果要继续进行软件更改,我们必须进行切片和分块。
这意味着软件设计实际是人为人自己提供技术支持的过程(人类互助)。软件设计是人类关系中的一项练习(banq注:道德伦理也是一种人类关系)。
 
众说纷纭:
认知负担很重要!从最小的功能代码块到软件体系结构中的最大组件,这都很重要。
 
我们的大脑处理复杂性的能力不仅仅只是分块!我们的大脑喜欢层次结构+模式。在我们的设计中,我们可以通过分层和具有各种模式的图式来支持层次结构。
 
在功能级别上进行切片和分块,然后在上下文级别上进行抽象,以使不同的涉众可以理解。
 
以我的经验,仅仅为了切片而切片是不好的。例如,我从没有看到从Monolith迁移到微服务的复杂性降低的情况,在大多数情况下,管理所有这些服务之间的集成比实际的Monolith困难得多。
(banq注:这种复杂性是用Monolith单体的标准来衡量的,比如原来一个团队负责一个单体,好像很轻松,不复杂,到了微服务以后,一个团队负责50个微服务,感觉复杂性增加,其实这没有意识到人的大脑的参与过程,一个人的大脑只能负责一到几个微服务,否则就会超过一个人的认知负担,因此,五十个微服务可能需要几个团队单独负责,从人员上看数量是增加了,但是在单体架构时期,你以为一个团队的几个脑袋负责一个单体就没有认知负担吗?单体内部耦合在一起如同泥球,当然模块化分块以后的单体是否只需要一个团队的几个脑袋就可以呢?其实模块化的单体与微服务的区别在于:微服务可以独立开发快速测试部署,不必与其他模块组装后再发布部署,因此,单体模块化架构只是一种过渡阶段,让你从一个团队扩张到十个团队很难,但是从一个团队到三、五个团队,再到十个团队就感觉踏实了。)