美文网首页代码优雅
软件模块的正交设计

软件模块的正交设计

作者: 字母数字或汉字 | 来源:发表于2016-06-23 03:04 被阅读0次

这篇文章是我的学习笔记,是通过学习简书作者袁英杰的文章《变化驱动:正交设计》有感而记。
摘录了他的一些句子。著作权归作者所有。

软件设计是为了实现功能,但功能的增加会降低人对软件的控制力,很快软件就会变得难以维护。人们使用分而治之的思想,进行软件系统的模块拆分。

为了降低软件的理解和修改的复杂度,提升可重用性,我们需要模块化

此时我们遇到了两个问题:怎么分,怎么合。说的细致一点是:怎么划分模块,怎么定义接口。

Kent Beck 说:“软件设计是为了在让软件在长期范围内容易应对变化。”
Kent Beck 提出了一个原则,要局部化影响

局部化影响的意思是:变化对软件设计带来的影响,要控制在尽可能小的范围内。

用软件工程的话,说的不那么抽象一点,要遵循高内聚、低耦合原则。

高内聚追求的是关联紧密的事物应该被放在一起,并且只有关联紧密的事物才应该被放在一起
低耦合追求的是软件的单位之间尽可能不要相互影响。

软件工程告诉我们,要让每个模块都尽可能高内聚,要让模块之间尽可能低耦合

而事实上,良好定义的模块与模块之间要实现交互,需要引入“接口”。而且要做到如下图所示的三边关系。

客户端、接口、实现 三方应追求的目标

该图来自于原文章。

这就是模块化设计的全部了。

如何将模块正交分解以减少变化带来的修改?

变化导致的修改有两类:

  1. 一个变化导致多处修改(重复);
  2. 多个变化导致一处修改(多个变化方向);

由此得到前两个策略:消除重复分离不同的变化方向

除此之外,我们要努力消除变化发生时不必要的修改,也有两种方式:

  1. 不依赖不必要的依赖;
  2. 不依赖不稳定的依赖;

这就是后面两个策略:缩小依赖范围向着稳定的方向依赖

怎么分
  • 消除重复
  • 分离不同的变化方向

重复包括客户端的重复和模块实现的重复,消除重复提高了模块的可复用性

当有变化需要让模块做其他方向的事情,那么优先选择改进代码使之做更加“通用”的事情,然后将不同的方向作为参数传入(你也可以根据语言特性选择模板、泛型、方法重载等技术)。将这些方向的选择从原模块中分离,将得到具有更高可扩展性的模块。

怎么合
  • 缩小依赖范围
  • 向着稳定的方向依赖

这两者都在强调接口的设计,接口应该精简,高内聚,稳定

说到稳定,看上面“分离不同的变化方向”的例子,是不是也是一个让接口更稳定的例子。

切记,需求来自客户端。要从需求上深挖其本质和共同点,才能设计好“高内聚的接口”。

相关文章

  • 软件模块的正交设计

    这篇文章是我的学习笔记,是通过学习简书作者袁英杰的文章《变化驱动:正交设计》有感而记。摘录了他的一些句子。著作权归...

  • DSL编程: Implements JHamcrest

    软件设计是一个「守破离」的过程。 --袁英杰 回顾设计 上次在「软件匠艺小组」上分享了「正交设计」的基本理论,原则...

  • HOC、复合组件、render prop

    上一篇文章中我们领略到了软件开发原则和设计思想的魅力,介绍了 KISS、DRY、SOLID、正交设计 等软件设计原...

  • 产品模块化设计的前世今生

    模块设计最早源自软件设计的基本概念,在早期的软件设计中提出了针对产品功能的模块化设计。 在设计好软件的体系结构后,...

  • 软件构架:正交4原则

    其中正交四原则是一种与范式,语言无关的设计原则。为了解决在模块化的过程中,如何让软件在长期范围内更容易应对变化。包...

  • IDEA

    IDEA 所有的设计都是为了隔离变化与不变隔离变化的方式就是进行正交分解软件里面的所谓加一层,本质就是正交分解的产...

  • 软件的几种设计

    软件的几种设计 可插拔设计 软件分模块呈现 所有模块都可以独立存在 通过控制中心来控制所有模块的加载 控制中心可以...

  • 开发流程&测试(驱动开发)

    一 软件设计阶段 概要设计阶段:确定模块的功能和模块的接口?软件项目相关的开发、测试、实施等流程和文档标准,熟练需...

  • 测试用例设计方法(三)正交试验和场景法

    一、正交试验设计法 正交试验设计法,是从大量的试验点中挑选出适量的、有代表性的点,应用依据迦罗瓦理论导出的“正交表...

  • 为什么 CSS 这么难学?

    CSS 不正交并不是对 CSS 的指责,如果能正交它肯定会做到正交的,现在的设计虽然不完美,但可能是最好的设计。 ...

网友评论

    本文标题:软件模块的正交设计

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