美文网首页
是什么增加了系统的复杂度

是什么增加了系统的复杂度

作者: Bruce_Talk | 来源:发表于2024-02-25 12:46 被阅读0次

最近在和产品经理以及研发团队讨论功能设计的时候,经常会遇到一个有趣的现象:在一个平台级产品中,尝试增加一个功能的时候,大家总会希望讨论,要不要把这个功能做成一个通用模块,以后在有类似需求的时候都可以复用。想法是好的,不过一旦要考虑复用,那么迎来的将是一系列的讨论,如何复用,复用的交互,其他各个模块的使用场景等等。这样一个可能简单的功能,往往要拖很久,因为考虑复用而增加很多“设计”。这些设计这不仅让我们思考,这样的复用真的让系统简单了吗?复用的目的是什么呢?是什么增加了系统的复杂度?

软件设计中有一种方法是“领域驱动设计”(Domain Driven Development),其中有一个思想是,系统复杂度的增加主要是因为领域之间的链接个数增加而导致的,并不是领域个数多少。如下图,5个元素但是有10条链接。如果只是5个彼此无关的元素,那么这个系统并不复杂。因为无需考虑彼此之间的关系。这也是面向对象思想一直希望追求的目标——高内聚低耦合。

relationship.png

DDD中提倡在动手开发之前,先识别领域边界,每个边界内部的设计都希望是高内聚的。这样可以减少边界之间的链接,因为当出现业务改动的时候,领域对象必须要考虑和自己有联系的对象的影响。当这些链接越来越多的时候,系统自然复杂性就增加了。这里就有一个反直觉的地方。我们在设计的时候,往往会想着把功能做成通用的,这样可以最大化的利用已有模块,一个地方修改,其他所有地方重用,减少重复的工作。理想是美好的,现实是残酷的。复用自然就会增加链接,因为复用的目的就是让更多的地方能够直接使用。这就直接增加了系统的复杂度。当领域边界识别不清楚的时候,这种复用会因为不同业务的需要,导致修改这个复用组件,久而久之这个组件内部也会充斥着各种业务条件,越来越高耦合了。

回到今天的话题,如果一个功能在设计之初,最简单的方式是不考虑复用,很容易在自己的模块中设计实现,一旦其他模块有类似需求,可以先在自己内部重新实现该功能,哪怕只是代码层面的copy。如果一定需要抽取一个独立模块用于复用,那么必须要确定识别足够清晰的领域边界之后才行。否则尽量不要复用,这种反到增加了系统整体的复杂度。

践行敏捷实践,让工作去繁从简。欢迎在留言区留言,交流落地经验。

【欢迎关注我的博客】

相关文章

  • MQ-面试

    目的 解耦、异步、削峰 问题 系统可用性降低,增加了mq环节,mq挂掉导致整个系统挂掉 系统复杂度提高,需要针对m...

  • 编程中的过度设计

    是什么? 进行了过多的面向未来的设计:进行了不必要的抽象封装,为系统增加了不必要的复杂度。 问题分析 程序设计的一...

  • 21 产品-理财-基金配置

    基金市场当前状态是什么? 公募基金5000多只,比A股上市公司4640家还要多。这对挑选基金反而增加了复杂度。 如...

  • 阿里研究员谷朴:API 设计最佳实践的思考

    API是软件系统的核心,而软件系统的复杂度Complexity是大规模软件系统能否成功最重要的因素。但复杂度Com...

  • java 设计模式:工厂方法模式

    前言 简单工厂模式每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度,违背了“开闭原...

  • 原创:利用 kubeadm 1.15 生成 etcd 证书

    etcd 一般通过 cfssl 或 openssl 生成证书, 增加了 kubernetes 集群的部署复杂度。本...

  • 什么时候用

    系统复杂度和微服务实时对效率的影响: 系统初期采用微服务反而会降低生产效率,随着系统复杂度的提升,微服务对生产效率...

  • 如何降低系统复杂度

    定义 首先我们对复杂的系统下一个定义,复杂度越高的系统就是越混乱越难以维护的系统。同样复杂度是一个相对的概念,当系...

  • 认知复杂度与职业发展

    生涯建构系统 (一)认知复杂度 (二)认知复杂度与职业发展 根据蓝菲尔(Landfield,1977)的观点...

  • 【软件架构篇】复杂度来源

    架构设计的目的就是解决系统的复杂度。架构师首先需要识别出系统的复杂度,然后再针对性地给出备选方案,选择备选方案,进...

网友评论

      本文标题:是什么增加了系统的复杂度

      本文链接:https://www.haomeiwen.com/subject/vfraadtx.html