软件系统设计的正交性

来源:互联网 发布:海岛旅游小镇数据 编辑:程序博客网 时间:2024/06/05 19:53

《程序员修炼之道:从小工到专家》读书笔记:第二章 注重实效的途径 第8部分 正交性


“正交性”是几何学中的术语,互为直角的直角坐标系就具有正交性;在计算技术中表示不依赖性或解耦性。
非正交的系统意味着系统中各组件互相高度依赖,这类系统中是不再有局部修正的情况了。

正交的好处:

1、提高生产率

改动得以局部化,所以开发时间和测试时间得以降低。
正交还能促进复用。
基于正交的组件进行组合,生产率会有相当微妙的提高。(例:windows的GUI,和Unix的各个小命令)

2、降低风险

能降低开发中固有的风险。
有问题的代码区域被隔离。
所得系统更健壮。
正交系统能得到更好的测试。
不会与特定的供应商、产品、或是平台捆绑在一起。

项目团队的正交性:

有正交性的团队特点:每个人都知道自己要做什么,并全力做出贡献。
不具有正交性的团队特点:团队的成员总在争吵,而且好像无法避免互相妨碍;没一次改动都需要整个团队开会,因为任何一个人都有可能受到影响。
如何提高团队的正交性呢?可以从使基础设施与应用分离开始。每个主要的基础设施组件(数据库、通信接口、中间件,等等)有自己的子团队。如果应用功能能明显的区分,可以按此划分。
项目团队的正交性的衡量方法:每个所需改动会涉及多少人。人数越多正交性越差。


正交系统的设计原则:

系统应该由一组相互协作的模块组成,每个模块的实现都不依赖于其他模块的功能。有时,这些组件被组织为多个层次,每层提供一级抽象。这种分层的途径是设计正交系统的强大方式。因为每层都只使用在其下面的层次提供的抽象,在改动底层实现、而又不影响其他代码方面,拥有极大的灵活性。分层也降低了模块间依赖关系的风险。
在设计组件时,可以多问问自己一个问题:如果我显著的改变某个特定功能背后的需求,有多少模块会受影响?
设计自己的组件时要注意:不要依赖你无法控制的事物。

使用第三方库时:

也需要注意自己系统的正交性。
它是否会迫使你对代码做不必要的改动。
让细节与代码隔离的好处:它使得你在以后更容易更换供应商。

编码:

可维持代码正交性的方法:
让代码保存解耦:不会没必要地向其他模块暴露任何事情,也不依赖其他模块的实现。如果要改变对象的状态,让这个对象替你去做。
避免使用全局数据:每当在代码中引用全局数据时,它都把自己与共享该数据的其他组件绑在了一起。一般而言,把所需的数据显式地传入模块,代码将更易于理解和维护。可以创建结构体,并传入此结构的地址。
避免编写相似的函数:重复的代码是结构问题的一种症状。关于这点可参考《设计模式》中的策略(Strategy)模式。

测试:

正交地设计和实现的系统也更易于测试,因为系统的各组件间的交互是形式化的和有限的,更多的系统测试可以在单个的模块级进行。因为相比集成测试,单元测试更容易规定和进行。

正交性原则与不要重复(DRY: Don't Repeat Yourself)原则紧密相关。运用DRY原则,可使系统中的重复降至最小;运用正交性原则,可降低系统中各组件间的相互依赖。结合使用这两个原则,你会发现你开发的系统会变得更为灵活、更易于理解、并且更易于调试、测试和维护。


0 0
原创粉丝点击