`
wanxiaotao12
  • 浏览: 457327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】一个好的设计应当具备哪些要素

 
阅读更多

   对于一个好的设计,我们往往会说其应当具备可维护性,这是最为基本的要求。其它的要求,比如性能、资源的占用等都应当在满足可维护性的情况下再去考虑的。 但可维护性是一个非常笼统的词,可以说一个词包含了很多的东西,比如,可读性、可扩展性等等,都可以当作是可维护性的内容。我在日常工作中,对于一个好的 设计,有一些自己的想法,主要是体现在“四性一痛”。

 
    第一,一个好的设计应当具有“一致性”。 一致性就是对于相类似的问题采用同样的方法去处理,而不是对于类似的情况,在case1中采用的是设计A,而在 case2中采用的是设计B。对于这种设计,其往往很难维护。 需要说明的一点是,一致性可以包括设计方法的一致性、函数命名的一致性、注释书写格式的一致 性等等 。在一致性上一个好的例子是:UNIX/LINUX中对于文件和设备的处理都是采用open()/close()/ioctl()/read() /write()这五个函数来实现的,当我们在UNIX/LINUX上编程时,只要说到打开设备或是文件,我们就知道应当如何做了。再来看看一致性不好的 一个例子:比如CLIB中的malloc()/free(),这是一对用于分配和释放内存(Heap)的函数,在函数的命名上应当说其一致性并不好,在我 看来malloc()/mfree()就要比它好些,不同之处就是在free()函数名的前面加了一个m。一致性好的软件,不论是维护或是阅读都让人觉得 舒服和自然,这一点是非常重要的!
 
    第二,一个好的设计应当具有“完整性”。 打一个比方,比如我们的程序需要写一个模块用于管理某种类型的资源,因此,我们写了一个allocate()函数 用于对这一资源进行分配。从完整性的角度来看有allocate()就应当有free()或是release()。因此,我们的设计应当包含free() 或是release()。完整性好的设计往往给模块的使用者带来某种程度的灵活性和便利性。
 
    第三,模块之间的“正交性”。 正交性体现在模块之间不应当存在功能重叠的部分,对于模块之间存在重叠的部分,往往表明我们需要抽象出另一个模块,从而将重叠的部分转移到这一新模块中。
 
    第四,设计的“简单性”。 这里的简单不是指我们考虑欠缺,而是指在我们将问题考虑周全后,找出一种简单的设计和实现方法。简单性包括代码逻辑的简单性和代码语句的简单性。简单意味着容易维护、理解,简单本身就是一种美!

 
    最后,我想对于一个好的设计,作者可以问问自己:我在设计这个模块时“痛苦”过了吗?如果没有,那存在两种可能;一是问题很简单或是我们自己的水平很高, 所以不需要更多的思考去实现它;另一种可能就是这一设计有可能是一个“头痛治头,脚痛治脚”的设计。好的设计,我们往往需要在很多方面进行权衡,在设计初 期是非常痛苦的一件事,但随着设计的完善,我们会发现“这一设计就是我想要的、就应当是这个样子的”,到时自己会觉得这个设计很舒服,真的体现了“苦尽甘 来”。
 
    对于上面所提到的一些好的设计的特点,在我们的工作中可能不是一次性设计到位的,但是我们必须将这些特点记在心中,并随着工作的进展最后实现它们。

本文出自 “李云 ” 博客,请务必保留此出处http://yunli.blog.51cto.com/831344/168867

分享到:
评论

相关推荐

    Flash格斗动画的动作设计和动作的制作.doc

    还有一个原因, 我不想用理论基础, 和动作基础来扼杀了一些想象力丰富的"孩子", 基础的东西学的深了, 会失去很多创意性的东西, 这不是我们想要的, 所以只要你自信自己的想象力够丰富, 动作设计够有创意, 那么你学着...

    Java毕业设计:基于SSM的在线租房管理系统的设计与实现(源码+文档+录像演示).zip

    从角色的需求上来划分,应当具有三个角色要素,分别为租客、出租方以及管理员三个角色,租客能够实现在线的查看房源,申请租房,签订租赁合同以及租金每月支付等功能。房东应当可以实现租金收入的统计,租赁合同的...

    网络营销策划的方案设计.docx

    因此,网络营销方案是一系列具体的、明确的、直接的、相互联系的行动计划的指令,一旦付诸实施,企业的每一个部门、每一个员工都能明确自己的目标、任务、责任以及完成任务的途径和方法,并懂得如何与其他部门或员工...

    基于SSM的在线租房管理系统的设计与实现.zip

    从角色的需求上来划分,应当具有三个角色要素,分别为租客、出租方以及管理员三个角色,租客能够实现在线的查看房源,申请租房,签订租赁合同以及租金每月支付等功能。房东应当可以实现租金收入的统计,租赁合同的...

    2021数学建模国赛优秀论文.zip

    **数学建模国赛概述:** 数学建模国赛是一个旨在考察参赛者在实际问题中运用数学模型和方法解决问题的竞赛。参赛者通常需要从给定的问题描述中提取关键信息,选择适当的数学方法,建立相应的模型,并用数学语言描述...

    一种大数据智能分析平台的数据分析方法及实现技术.doc

    2 功能设计 2.1 总体架构 本文讲述的数据分析方法及实现技术是建立在Hadoop/Spark技术生态圈的基础 之上,以实现用户集成处理、、清理、分析的一个统一的数据处理平台;按数据类别分 为线数据、归档数据;按数据...

    物业程序文件编制及要点.docx

    编制程序文件清单 依据质量体系总体设计和对质量体系要素逐级展开的质量要求,确定应编制的程序文件清单,对比已有的各种文件,确定需新编、改写和完善的程序文件,制定打算逐步编制。 3.程序文件的结构和格式 程序文件...

    245ssm-mysql-jsp 在线租房系统.zip(可运行源码+数据库文件+文档)

    从角色的需求上来划分,应当具有三个角色要素,分别为租客、出租方以及管理员三个角色,租客能够实现在线的查看房源,申请租房,签订租赁合同以及租金每月支付等功能。房东应当可以实现租金收入的统计,租赁合同的...

    艺帆全屏幻灯大气商务手机网站建设模板源码

    所以,一款能同时支持不同网络的手机是真正商务手机的第一个基本要求。除了双待机功能,真正商务手机应该具备的就应该是隐形保密功能。商务人士的手机中存储大量珍贵数据,数据的价值早已远远超出手机的价值。所以,...

    我国GIS软件的发展现状

    地理信息产业是信息产业的一个重要组成部分,地理信息技术是IT技术的一个重要分支,地理信息系统软件是一类特殊的计算机信息系统软件,它是以各类空间数据及其属性为基础,为各种应用目的服务的一类计算机信息系统。...

    大数据下的决策思维.docx

    我们认为,至少应当从三个层面来考察这一问题:(1)传统数据是以数字为载体的信息编码方式,主要具备数值属性和物理属性。大数据则是对于数字资源的规模化整合,数据和数据模块之间的关系及运算操作系统化,构成新的...

    三、民用机器人.pdf

    1988年法国的埃斯⽪奥将机器⼈定义为:"机器⼈学是指设计能根据传感器信息实现预先规 划好的作业系统,并以此系统的使⽤⽅法作为研究对象"。 1987年国际标准化组织对⼯业机器⼈进⾏了定义:"⼯业机器⼈是⼀种具有⾃...

Global site tag (gtag.js) - Google Analytics