软件设计的基本原则

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

BAIDU CONFIDENTIAL
2005
二、总体设计
好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在 结构顶部有较高的扇出数,在底部有较高的扇入数。这种结构,使得接口简 单、模块之间的独立性强,数据便于集中处理 首先把最核心的功能、数据结构、算法提取出来 确定不变部分,封装可变部分 接口尽量抽象 接口要稳定 请补充
BAIDU CONFIDENTIAL
2005
一致性(一)
1、概念一致
(1)先界定概念,再做设计考虑 (2)基本概念,在MRD阶段进行界定 (3)影响到核心数据结构设计的概念,在总体设计中界定
2、各个模块使用的方法、接口、模式保持 一致
反例: (1)一个模块的数据使用纯文本格式,另外一个模块使用XML格式 (2)URL长度定义,一个模块定义为256bytes,另外一个模块定义为200bytes
BAIDU CONFIDENTIAL
2005
Q:在各自负责的模块中,是否有过分复杂 化的设计?请举例。
例子: (1) WST PB(Page Builder),数据、呈现、逻辑混为一体,无法剥 离和拆分 (2)常见的“简历设计”,即为了简历好看,而做的一些花哨、复杂设计。 WST PB是一个典型的“简历设计”
BAIDU CONFIDENTIAL
2005
简单性(二)
2、模块间的接口保持简单
。模块可以是“子系统”,也可以是具体的函数、类 。模块间只传输最基本的数据,而不能为了便利对数据进行加工
例子:
原始数据中有”&”符号,没有必要在数据层转换为”&amp”;以适应XML格式的输出
。子系统之间的接口尽量定义为最基本、最原始的结构 。子系统之间的接口尽量保持数据和数据结构剥离 例子:
2005
第一部分
基本原则
BAIDU CONFIDENTIAL
2005
基本原则
简单性 一致性 可扩展性 低耦合,高内聚
BAIDU CONFIDENTIAL
2005
简单性(一)
1、进行功能拆分,每个模块尽量简单
。在做总体设计时,对数据、逻辑、呈现的拆分应有充分的考虑,保持三者的 低耦合度,即每一层都尽量简单 。 在做总体设计时,应对服务器的部署、模板分布进行拆分,每一层的服务器 尽量只做单一的工作 。 在做详细设计时,模块(函数、类),只完成最简单的工作
BAIDU CONFIDENTIAL
2005
低耦合,高内聚(五)
3、基本原则
尽量使用数据耦合方式,避免使用内容耦合 模块按功能逻辑划分,而不是为了方便 模块间尽量使用通信接口和数据,尽量不使用公用数据结构 不相关的东西不要组织在一起
BAIDU CONFIDENTIAL
2005
Q:还有哪些经验和体会可以归纳为一条原 则?
BAIDU CONFIDENTIAL
2005
第二部分
经验性原则
BAIDU CONFIDENTIAL
2005
在此描述一些经验性原则,按设计前期、总体设计、详细设计分别描述 这些原则仅仅作为个人体会,请大家看完后描述自己的体会
BAIDU CONFIDENTIAL
2005
一、设计前期
在MRD阶段就严格界定概念 明确系统限制 请补充
BAIDU CONFIDENTIAL
2005
三、详细设计
不要太死板,可以接受适当的折中 尽量使用成熟的模式、数据结构和算法 接口不兼容,尽量在接口上层做适配器,而不是修改接口和代码 始终贯彻逻辑和数据分离的原则 以数据为中心,而不是以操作为中心 注重输入输出、接口、环境等三大要素
BAIDU CONFIDENTIAL
6、开发者遵循共同的软件设计风格和设计格 式
(1)建立合适的文档规范、设计规范,多个开发者遵循 (2)个人养成一致性习惯
例子: 在编写这个ppt中,有意思的保持标题使用32号字,描述使用18号字,例子使用12号字。
BAIDU CONFIDENTIAL
2005
Q:什么原因使得很难保持严格的一致性?
A1:需求变更 A2:接口定义不明确,数据之间的关系拆分不合理 A3:没有形成良好的一致性习惯
友情提示:在设计数据结构中,建议先充分考虑到数据的流向,在流程的各个阶段的产出以及对应的数据结构。保持各 个数据结构的一致性
BAIDU CONFIDENTIAL
2005
可扩展性(一)
1、明确和预估可扩展需求
BAIDU CONFIDENTIAL
2005
T:扩展性需要适当,没有必要做过分的扩 展
以上例,如果我们只需要采集Internet数据,抽象数据层纯属多于
BAIDU CONFIDENTIAL
2005
低耦合,高内聚 (一) 1、模块间的耦合
(1)内容耦合(content coupling) 。一个模块直接访问另一模块的内部数据。 。一个模块不通过正常入口转到另一模块的内部。 。两个模块有部分代码重迭。 (2)公共耦合(Common Coupling) 若干模块访问一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、 共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块。 (3)控制耦合(Control Coupling) 一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。显然,对被控制模块的修 改,会影响控制模块。 (4)数据耦合(Data Coupling) 一个模块的输出结果是另外一个模块的输入
软件设计的基本原则
邱志东
BAIDU CONFIDENTIAL
2005
前言
软件设计基本原则 软件设计的方法 软件设计文档编写
BAIDU CONFIDENTIAL
2005
“培训”方法
列举大家公认的原则 补充case 所有的原则实际上都不是必须遵守的“金 律”,熟练把握的人可以反其道而行
BAIDU CONFIDENTIAL
BAIDU CONFIDENTIAL
2005
低耦合,高内聚(四)
2、模块内部数据和处理之间的联系
(4)通信型 模块中的成分引用共同的输入数据,或者产生相同的输出数据,则称 为是通信内聚模块。 通信型模块比瞬时型模块的内聚性强,因为模块中包含了许多独立的 功能,但却引用相同数据。 (5)顺序型 模块中某个成分的输出是另一成分的输入。由于这类模块无论数据还 是执行顺序,模块中的一部分依赖于另外一部分。因此具有较好的内 聚性。 (6)功能型 一个模块包括而且仅包括完成某一具体功能所必须的所有成分。或者 说,模块的所有成分都是为完成该功能而协同工作、紧密联系、不可 分割的。
as和bs、di之间的接口是一个非常好的case
BAIDU CONFIDENTIAL
2005
简单性(三)
3、使用简单的实现方法
。不要使用太复杂的数据结构 。如果有现成的实现方法,尽量复用 。不要把事情复杂化: 例子:
在html中提取正文,如果设计目标仅仅就是需要获取正文,可以简单地把tag标签(<,>之间的内容)忽略,剩余的 就是正文。而不需要建立复杂的树形结构
BAIDU CONFIDENTIAL
2005
低耦合,高内聚(二)
。四种耦合方式的耦合强调依次降低。 。尽量使用数据耦合方式,避免使用内容耦合。
BAIDU CONFIDENTIAL
2005
低耦合,高内聚(三)
2、模块内部数据和处理之间的联系
(1)偶然型 为了节约空间,将毫无关系(或者联系不多)的各成分放在一个模块 中。这样的模块显然不易理解,不易修改。 (2)逻辑型 将几个逻辑上相似的功能放在一个模块中,调用时由调用模块传递的 参数确定执行的功能。由于要进行控制参数的传递,必然要影响模块 的内聚性。 (3)瞬时型 将需要同时执行的成分放在一个模块中,因为模块中的各功能与时间 有关,因此又称为时间内聚或经典内聚。例如,初始化模块,中止模 块等这类模块内部结构较简单,一般较少判定,因此比逻辑内聚强, 但是由于将多个功能放在一起,给修改和维护造成困难。
2005
2005
其他
不要使用花哨的技巧,在设计阶段,技巧就是毒药。(编码阶段倒还容许使 用一些灵活的技巧) 如果一个功能复杂到需要1000行代码(C语言)来实现,你的设计肯定有问 题 如果你觉得你的设计很复杂,那肯定很复杂,请参考“简单性”原则
BAIDU CONFIDENTIAL
2005
谢谢!
BAIDU CONFIDENTIAL
3、接口预留
在接口设计中,可以做适当的冗余 在接口设计中,可以很容易地实现在接口上再做一层适配。即低层接口是上 层接口的一个子集
BAIDU CONFIDENTIAL
2005
可扩展性(三)
4、进行适当的逻辑抽象,以抽象层做为接口
。在关键接口中,可以在数据、逻辑之外做抽象,以抽象层为接口 例子:
一个系统实现数据采集,数据源分别来自Internet、局域网的文件系统、数据库、合作伙伴的推送数据。 设计方案: (1)定义一个抽象的数据采集层 (2)各个数据源的采集,以抽象层支持的格式输出数据。 (3)用户只以抽象数据采集层为接口
(1)MRD中需要有可预见的未来需求 (2)在性能评估中,有适当的冗余度 (3)预估值的考虑:a、凭经验 b、适当的调研分析
BAIDU CONFIDENTIAL
2005
可扩展性(二)
2、数据和逻辑分离
。所有的设计都可以简单的理解为:数据+赋予数据的操作 。数据和逻辑分离的设计显然有良好的可扩展性 。最复杂、最难扩展的设计就是数据、逻辑、呈现三者的混合
反例:
int f1() { if (!strcmp(CTDI.cityname,"吉林省")) goto NO_ABR_HANDLER;}
BAIDU CONFIDENTIAL
2005
一致性(三)
5、始终贯彻当初的理念
(1)确定了的பைடு நூலகம்念和策略需要始终贯彻
例子:同义词策略,不再使用“包含匹配”概念。
(2)如果有需求更改,不要修改当初的设计,而是在设计中做适配。
BAIDU CONFIDENTIAL
2005
一致性(二)
3、使用一致的系统限制数据
(1)基本功能、性能数据在MRD中就需要能有体现 (2)总体设计和详细设计需要有明确的系统限制数据 (3)不能确定的数据,尽量使用经验值(例:URL长度,凭经验,也觉得 256bytes比200bytes合理)
4、避免在一个功能中做过多的特殊处理
相关文档
最新文档