如何提升结构化设计的能力?

软件架构能力指的是为相对复杂的场景定义并引导实施结构化软件方案的能力,其中结构化,代表这个软件在其设计范围内的设计理念、代码结构和实现方式上是同质的。

提升结构化设计能力的起点,其实就是代码的结构性。不过在结构性之前,还有个更朴素的起点,就是代码的整洁性。

在互联网时代,代码整洁主要来自编程规范的掌握和运用、设计抽象和常见设计模式的采用。对于编程规范,各大软件公司一般都有要求,网上可以检索到。

面向对象编程(OOP)的设计思想。OOP 其实是结构化思维的一个重要范式,要求我们认真思考什么是类,什么是对象,什么是对象所具备的属性,什么是对象可能发生的行为,这个行为的作用对象是谁,等等。通过这种对模型本质的思考来定义软件结构,就是提升软件结构性设计能力的有效方法。

另一个对代码整洁性帮助很大的就是设计模式。设计模式的主要价值包括三个方面。

  1. 沉淀经验,用一句话来简单描述就是:如果遇到这种场景,就应该采用这种设计模式。可以说,这是个系统化且高效借鉴他人成功经验的过程。
  2. 传递设计原理,也就是对代码背后思考的一种标准化注释。代码所覆盖的领域可能是全新的,比如是元宇宙中的一个新物种,甚至在现实世界中都不一定有对应的存在。但如果用 _Factory_ 或者 _Visitor_ 这个词,别人马上就会知道这个设计背后的含义,比注释更深远也更准确。可以说,你通过规范化的设计语言表达了自己的思想。
  3. 降低理解和维护代码的门槛。如果实现中经常采用常见的设计模式,就会大幅降低其他人理解和维护你的代码的成本。在代码中,这些设计模式就好比旅游景点里供游人歇息的座椅一样,让另一个在你的代码高山里艰难攀行的路人,突然间找到了一个熟悉的小憩之地。

设计模式与 OOP 思维范式不同。设计模式强调趋同性,用广泛传播的知识来标准化代码的实现,从而降低实现手段和命名的多样性,也就是提升代码的一致性。当然也有人非常反对设计模式,认为设计模式多数时间都被用烂了。很多人为了引用设计模式而得出了错误的设计,这种现象的确存在。但这不是设计模式的问题,而是使用者应用不当的问题。

那么在日常工作中,想做好结构化设计,应该具体关注什么呢

1、设计理念。也就是说,整体设计需要与公司或部门的理念保持一致。

比如整个公司都采用分层架构,那么你的设计也要尽量采用分层架构。整个公司都采用微服务的设计理念,那么你的设计也要采用微服务的设计理念。否则写出来的代码既难维护又难理解,也难以被别人复用。

2、API 的结构性。也就是说,软件模块的对外界面要有比较明显的语义结构。

暴露给其他调用方的 API,要有条理、表达准确,且易于理解。否则,API 在被使用的环境中,会让调用方的代码变得晦涩难懂、结构混乱。

首先是语义表达的结构性。如果把 API 理解成一段文字,那么这段文字需要有内在的顺序和结构,也就是我们强调的语义结构。这种定义具有一定的内在含义和逻辑顺序,因此也就具有宏观的结构性。

其次是功能组织上的结构性。举个例子,一个 API 可能为多个用户角色服务,每个用户角色又有多个场景,每个场景还可能有多个功能。那么这些功能就应该组织成三层的结构:角色、场景和功能。不同的用户角色和不同的使用场景,都应该有不同的设计粒度。

最后是数据模型的结构性。API 会暴露数据给调用方,那么暴露出来的数据就要有清晰的结构,遵守一定的规范。

3、模块内部的结构性,也就是程序的结构性。这种结构性其实是我们前面提到的程序员设计能力的具体体现。

事实上,我们日常工作涉及的很多领域都有现成的国际标准,不需要再去发明创造。使用常见的 SprintBoot 等服务框架,依赖主流而不是小众的技术,遵守 W3C 发布的最佳实践等,都是提升代码结构性的好办法。

此文章为5月Day27 学习笔记,内容来源于极客时间《郭东白的架构课》,推荐该课程。

猜你喜欢

转载自blog.csdn.net/key_3_feng/article/details/130902164