版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件系统设计 帮助你从程序员上升为系统设计师 搞清楚“设计什么”以及“如何设计” 上 海 漫 索 计 算 机 科 技 有 限 公 司目录1. 软件系统设计基本概念 2. 体系结构设计3. 用户界面设计4. 数据库设计5. 模块设计6. 数据结构与算法设计7. 小结参考书:软件工程与项目管理解析,林锐 著,电子工业出版社,20031. 软件系统设计基本概念 1.1 基本概念 设计师与程序员的地位。系统设计的技术难度要比编程、测试的高。所以程序员、测试员称为“员”,而设计师尊称为“师”。 系统设计的好坏在根本上决定了软件系统的优劣。我们可以断言“差的系统设计必定产生差的软件系统”,但是不能保证“好
2、的系统设计必定产生好的软件系统”。因为在设计之前有需求开发工作,在设计之后还有编程、测试和维护工作,无论哪个环节出了差错,都会把好事搞砸了。 据说上帝把所有的女士都设计成天使,可是天使们在下凡的时候,有些人双脚先着地,有些人脸先着地。上帝的这一疏忽让很多女士伤透了心。所以我们在开发软件时,一定要吸取这个教训。 系统设计之源是软件需求,包括“功能性需求”与“非功能性需求”。系统设计的目标就是使所设计的系统能够被开发方顺利地实现,并且恰如其分地满足用户的需求,使开发方和用户的利益极大化。开发人员不万不能偏离需求,为了追求技术的先进性而开展系统设计工作。 依据“分而治之”的思想,我们把系统设计过程划
3、分为两个阶段:高层设计阶段和详细设计阶段。高层设计阶段的重点是体系结构设计。详细设计阶段的重点是用户界面设计、数据库设计、模块设计、数据结构与算法设计等。 著名3D游戏软件Quake设计师Michael Abrash 的总结:“所有真正杰出的设计一旦被设计好,看起来都是那么的简单和显而易见。但是在获得杰出设计的过程中,需要付出令人难以置信的努力。” 1. 软件系统设计基本概念系统设计过程示意图 1. 软件系统设计基本概念1.2 软件系统与人体的比喻 体系结构如同人的骨架。如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会成为人。人的身材大小取决于骨架大小,天生小个子的人
4、基本上不可能成为威猛的大汉,后天再努力(例如锻炼和吃喝)也白搭。由此可见,体系结构乃是系统设计的重中之重。 用户界面如同人的外表,最容易让人一见钟情或一见恶心。象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。我们在设计软件时不要沉迷于技术,而要多多思考什么样的界面才能让用户更加喜欢。数据库是存储和处理数据用的。人体的数据库是大脑,知识相当于数据,全存在大脑里。如果脑子里存储的知识很多,那么这个人就显得博学。如果脑子处理知识的速度很高,那么这个人就显得聪明。数据库设计的主要挑战是“高速处理大容量的数据”。 模块如同人的器官。每个器官都具有特定的功能,器官们依附
5、在骨架上。模块是软件系统的部件,它们安插在体系结构上(否则运行起来掉光光了)。在设计模块时要重视功能独立性,还要追求“高内聚、低耦合” 。 数据结构与算法如同人的神经和肌肉,它分布在全身,让器官具有生命并能发挥功能。人之所以能够全身运动,那是无数的神经和肌肉在起作用。如果局部的神经和肌肉失效了,那么会导致对应的器官残废。如果全局的神经和肌肉失效了,那么人就瘫痪了。同理,数据结构与算法也有全局和局部之分,都要慎重设计。 1. 软件系统设计基本概念1.3 漫谈设计模式 20世纪90年代,面向对象(Object-Oriented)方法与技术在国内软件业界十分火爆,人们热衷于谈论“对象”并引以为荣。十
6、多年来,人们发表、出版了无数的文章和书籍。现在,该写的似乎都写完了,没有新花样玩了,真是一片无聊。设计模式(Design Pattern)及时问世,面向对象爱好者们终于有了新的追求。 1995年,Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(戏称“四人帮”)出版了Design Patterns: Elements of Reusable Object-Oriented Software,该书的中译本已于2000年出版 .“四人帮”这本书的主要贡献是:确立了设计模式这个术语,创导了一种新的面向对象设计思潮。该书出版后,全世界参与
7、设计模式研究的人数呈爆炸性地增长。该书的负面效应是:这本书深奥无比,读者被分成两类,即“看得懂设计模式的”和“看不懂设计模式的”,后者居多。很多人刚入门时就被吓住了,知难而退。 何为“模式”和“设计模式” ?模式描述了在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样你就能一次又一次地使用该解决方案而不必重复劳动。模式就是一种公式化的表现,究竟公式化是不是好事?(蔡学庸精辟的解释) 尽管软件技术发展非常快,但是仍然有非常多的设计模式可以让我们套用,包括体系结构模式、数据结构模式、接口模式等。 小结:设计模式的应用价值在于它能帮助人们简便地复用以前成功的设计方案。设计模式不是凭空产生
8、的,只有对应用域问题及其解决方案进行抽象和分析,发现本质,并按照一定的格式记录下来,才能成为可以被人们复用的设计模式。 2. 体系结构设计2.1 体系结构设计原则中国科学院的杨叔子院子如是言:文学中有科学,音乐中有数学,漫画中有现代数学的拓扑学。漫画家可以“几笔”就把一个人画出来,不管怎么美化或丑化,就是活像。为什么?因为那“几笔”不是别的,而是拓扑学中的特征不变量,这是事物最本质的东西。体系结构是指软件系统的基本和主体的形态,也就是软件系统中“最本质”的东西。一个软件系统的体系结构设计得好不好,可以用“合适性、结构稳定性、可扩展性、可复用性”这些特征量来评估。合适性:即体系结构是否适合于软件
9、的“功能性需求”和“非功能性需求”。设计师可以充分发挥主观能动性,根据需求的特征,通过推理和归纳的方法设计出合适的体系结构。经验不丰富的设计师往往把注意力集中在“功能性需求”而疏忽了“非功能性需求”,殊不知后者恰恰是最能体现设计水平的地方。高水平的设计师高就高在“设计出恰好满足客户需求的软件,并且使开发方和客户方获取最大的利益,而不是不惜代价设计出最先进的软件。(以设计住宅为例)对于软件系统而言,能够满足需求的设计方案可能有很多种,究竟该选哪一种?此时商业目标是决策依据,即选择能够为开发方和客户方带来最大利益的那个设计方案。大部分软件开发人员天生有使用新技术的倾向,而这种倾向对开发商业产品而言
10、可能是不利的,切记切记。 2. 体系结构设计结构稳定性:当前中国有几句流行的至理名言:“稳定压倒一切”、“发展是硬道理”。发展的前提条件是稳定,社会如此,开发软件产品也是如此。 体系结构一旦设计完成,应当在一定的时间内保持稳定不变,只有这样才能使后续工作顺利开展。如果体系结构经常变动,那么建筑在体系结构之上的用户界面、数据库、模块、数据结构等等也跟着经常变动,用“树倒猢狲散”来比喻很恰当,这将导致项目发生混乱。高水平的设计师应当能够分析需求文档,判断出哪些需求是稳定不变的,哪些需求是可能变动的。于是根据那些稳定不变的需求设计体系结构,而根据那些可变的需求设计软件的“可扩展性”。 可扩展性:可扩
11、展性是指软件扩展新功能的容易程度。可扩展性越好,表示软件适应“变化”的能力越强。可扩展性越来越重要,这是由现代软件的商业模式决定的: 社会的商业越发达,需求变化就越快。 现代软件产品通常采用“增量开发模式”,开发商不断地推出软件产品的新版本,从而不断地获取增值利润。 稳定性和可扩展性之间存在辨证的关系:如果系统不可扩展的话,那么就没有发展前途,所以不能只关心稳定性而忽视可扩展性;而软件系统“可扩展”的前提条件是“保持结构稳定”,否则软件难以按计划开发出来,稳定性是使系统能够持续发展的基础。所以稳定性和可扩展性都是体系结构设计的要素。 如果每次变化都导致体系结构发生大的变动,那简直就是“伤筋动骨
12、”,这样的体系结构无疑是败笔之作。(例如房屋装修) 2. 体系结构设计可复用性 :复用就是指“重复利用已经存在的东西”。被复用的对象可以是有形的物体,也可以是无形的知识财富。复用不是人类懒惰的表现而是智慧的表现。因为人类总是在继承了前人的成果,不断加以利用、改进或创新后才会进步。 复用的有利于提高产品的质量、提高生产率和降低成本。由经验可知,通常在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。勤劳并且聪明的人们应该把大部分的时间用在小比例的创新工作上,而把小部分的时间
13、用在大比例的成熟工作中,这样才能把工作做得又快又好。复用的意义很容易理解,人们也乐意复用以前的成果,但是前提条件是该成果具有比较好的可复用性。可复用性是指成果被复用的容易程度。 可复用性是设计出来的,而不是偶然碰到的。要使体系结构具有良好的可复用性,设计师应当分析应用域的共性问题,然后设计出一种通用的体系结构模式,这样的体系结构才可以被复用。 2. 体系结构设计2.2 体系结构设计流程体系结构设计流程:6个步骤体系结构设计报告模板见word文档 2. 体系结构设计2.3 层次结构介绍层次结构是最常见的体系结构模式,它体现了“分而治之”的思想:当我们没法一口气解决复杂的原始问题时,就把该问题切割
14、成许多个小的相对简单的问题,然后逐个解决。水平方向切割产生的层称为Layer,而竖直方向切割产生的层称为Tier。 层次结构在人类社会里随处可见。有个村长曾得意地向老婆吹牛:“全中国只有四个人比我的官儿大,乡长、县长、省长和国务院总理”。政府的行政结构应当划分为多个Layer和Tier。如果Layer和Tier的数目太少了,那么各级政府的领导人会非常劳累。反之如果Layer和Tier的数目太多了,那么导致政府机构太臃肿,办公效率极低。 古代中国文人的学历大体分为两层:秀才和举人。这种划分太粗了(即Layer数目太少),对发展教育是很不利的。很多老百姓读不起几年书,拿不到秀才毕业证书的人就被归类
15、为文盲,不幸成为社会下层人物。虽然社会上的秀才人数也不少,但是从秀才到举人的跨度太大、门槛太高,很多秀才考举人考了一辈子也考不上。典型的例子是儒林外史里的范进,范进在青年时期就成为秀才,可惜他考举人考了几十年!等他碰巧考上举人的时候,已经是个老头了,只给朝廷增加负担而没有贡献。后人吸取了经验教训,于是逐步建立了现代的学历层次结构,将学历划分为5个层次:小学、中学、学士、硕士、博士。这样人们读书的选择面广了,工作面也广了。“层次结构”是应用最为广泛的体系结构模式。其最大的优点是具有良好的可扩展性,人们在扩充或修改功能时,基本不会破坏原有结构的稳定性。但是万事有利必有弊,层次结构的系统的主要缺点是
16、:管理多个Layer和Tier比较麻烦,运行效率可能比较低。所以,一个具备良好层次结构的系统,其Layer和Tier的数目要恰如其分。 3. 用户界面设计3.1 什么是好的用户界面 通俗地讲,用户界面“好不好”主要看它是否“容易使用”和“美观”。 易用性是指用户使用软件的容易程度。现代人的生活节奏快,干啥事都想图个方便。谁都不乐意掏钱买很难用的东西,所以把易用性作为用户界面的重要属性对待无可非议。除了要求软件易用之外,人们还希望用户界面美观。电影食神里的一段精彩故事情节可以帮助我们理解界面美观的重要性。美观的界面能消除用户由感觉引起的乏味、紧张和疲劳(情绪低落),大大提高用户的工作效率,从而进
17、一步为发挥用户技能和为用户完成任务作出贡献。人们对美的向往和追求是与生俱有的。显然没有开发人员愿意丑化自己的软件,也没有用户嗜好丑陋的界面。软件开发者要设计美,用户要享受美,所以界面的美是开发者与用户的共同需求。全世界无数人使用Microsoft公司的操作系统DOS, Windows 3.1, Windows 9x, Windows 2000和 Windows XP,这些操作系统的确是越来越好用了,并且越来越漂亮了。界面的“易用性”和“美”充分体现了人机交互作用中人的特性与意图,越来越多的用户将通过具有吸引力而令人愉快的人机界面与计算机打交道。 3. 用户界面设计3.2 开发人员的能力缺陷尽管
18、国内有很多技术出色、聪明过人的软件开发人员,但是他们未必开发得出“易用”的和“美观”的软件。主要原因有: 国内绝大多数大学的计算机学科教育存在缺陷:没有开设人机工程学、美学、心理学这些必修课。由于学生们接受的教育几乎全是科学与技术,他们根本不知道怎样才能设计出易用、美观的用户界面,很多人甚至想都没有想过。当他们毕业后真正参与软件产品开发时,只好凭着个人的经验与感觉设计软件的用户界面,这样产生的界面往往得不到大众用户的认可。 开发人员在设计用户界面方面不仅存在先天的教育缺陷,更加糟糕的是还常常犯“错位”的毛病,即他以为只要自己感觉用户界面漂亮、使用起来方便,那么用户也一定会满意。俗话说“王婆卖瓜
19、,自卖自夸”。当开发人员向用户展示软件时,常会得意地讲:“这个软件非常好用,我操作给你看,是很好用吧!蛮漂亮的吧!” 软件是否易用、是否美观要让用户来评价。如果用户对界面很不满意,开发人员不要有逆反心里“到哪里找来的笨蛋!”。其实不是用户笨,是自己开发的软件太笨了。当用户真的感到软件很好用时,一股温暖的感觉油然而生,于是就用“界面友好”来表扬这个软件。 3. 用户界面设计3.3 用户界面设计原则(10个)用于提高易用性的界面设计原则有8个:用户界面适合于软件的功能容易理解风格一致及时反馈信息出错处理适应各种用户国际化个性化 用于提高美观程度的设计原则有:合理的布局和谐的色彩3. 用户界面设计设
20、计原则1:用户界面适合于软件的功能用户界面的合适性是指界面与软件功能相融洽的程度。软件的功能需要通过用户界面来展现。毫无疑问,用户界面一定要适合于软件的功能,这是最基本的要求。否则用户无法通过这个界面来使用软件,如果连用都不能用,“易用性”根本就无从谈起。 例如,对于一个三维建模软件而言,如果用户不能使用鼠标对模型进行旋转、移动、缩放等操作,那么这个软件的用户界面就不适合于软件的功能。如果不改进用户界面的话,即使软件的内核功能很强(如算法很先进),这个软件也很难卖得出去。 合适性差的界面无疑会混淆软件意图,致使用户产生误解。即使它不损害软件功能与性能,也会使用户产生不该有的情绪波动。“用户界面
21、适合于软件的功能”是基本的设计原则,它提醒设计者不要片面追求界面外观漂亮而导致华而不实。界面的合适性既提倡外美内秀,又强调恰如其分。 设计原则2:容易理解。如果用户很难理解界面的意图,那么他使用起来肯定很费劲。所以“容易理解”是“容易使用”的前提条件。提高用户界面可理解性的一些规则如下:界面中的所有元素(如菜单、工具条等)没有错误,也不会让人误解。所有的界面元素应当提供充分而必要的提示,例如当鼠标移动到工具条上的某个图标按钮时,应当在该图标旁边出现功能提示。界面结构能够清晰地反映工作流程,以便用户按部就班地操作。对于复杂的用户界面而言,最好提供界面“向导”,及时让用户知道自己在界面结构中所处的
22、位置。例如对于基于Web的应用软件,应该在界面上显示“当前位置”,否则用户很容易在众多的页面中迷失方向。 3. 用户界面设计设计原则3:风格一致 软件的用户界面中,同类的界面元素应当有相同的视感和相同的操作方式。例如命令按钮是最常见的界面元素,所有命令按钮的形状、色彩以及对鼠标的响应方式都是一致的同一类型软件的用户界面应当有一定程度的相似性。例如Microsoft公司的Office家族里有Word、Excel、PowerPoint、Outlook等软件,这些软件提供的“复制、剪切、粘贴”功能的操作方式都是相同的。 对于用户界面而言,风格一致的最大好处就是能够减少用户的记忆量、减少出错几率,并且
23、迅速积累操作经验。所以熟悉Word软件的人基本上不用翻阅手册就能使用PowerPoint软件,可谓“无师自通”。 通用软件产品的界面设计很注重一致性。设计者必须密切注意在相同应用领域中最流行的软件的界面,必须尊重用户使用这些软件的习惯。例如DOS和Windows下的软件习惯于设置F1键为帮助热键,如果某个设计者别出心裁地让F1键成为软件终止的热键,那么在用户渴望得到帮助而伸手击F1键的一刹那,他的工作就此完蛋。相信这个用户会被这另类的F1气疯了。 目前流行的软件开发工具如Visual C+、Visual Basic、Delphi、Java Builder、Power Builder等,都能够快
24、速地开发出非常相似的图形用户界面。在Internet/Intranet领域,浏览器几乎成了唯一的客户端软件,因为Internet用户希望用完全一致的浏览方式来完成千变万化的任务。 3. 用户界面设计设计原则4:及时反馈信息 用户进行某项操作后,如果过了一会儿(几秒钟)用户界面一点反应都没有,这将使用户感到迷茫和不安,因为他不知道是自己操作错了还是软件死机了。所以及时反馈信息很重要,至少要让用户心里有数,知道该任务处理得怎么样了,有什么样的结果。 例如下载一个文件,界面上应当显示“百分比”或相关数字来表示下载的进度,否则人们不知道要等待多少时间。如果某些事务处理不能提供进度等数据,那么至少要给出
25、提示信息如“正在处理,请等待”,最好是提供合适的动画让用户明白软件正在干活、没有死机。设计原则5:出错处理。用户在使用软件的过程中,不可避免地会出现一些错误的操作。在设计用户界面时必须考虑出错处理,目的是让用户不必为避免犯错误而提心吊胆、小心翼翼地操作。常见的错误处理方式有: 提供对输入数据进行校验的功能。当用户输入错误的数据时,及时提醒用户改正数据。 对于在某些情况下不应该使用的菜单项和命令按钮,将其“失效”(屏蔽)可以有效防止该项功能被错误地使用。例如:对于某些管理软件,不同的用户有不同的操作权限。如果低权限的用户登录到系统,那些只有高级权限用户才能使用的功能应当被屏蔽(如变成“灰色”不可
26、操作)。 提供Undo功能,用以撤销不期望的操作。 执行破坏性的操作之前,应当获得用户的确认。例如用户删除一个文件时,应当弹出对话框:“真的要删除该文件吗”,当用户确认后才真正删除文件。 3. 用户界面设计设计原则6:适应各种用户 一个软件产品可能有许多类型的用户,例如有些用户对计算机比较外行,有一些用户可能是计算机的行家。在设计用户界面必时应当尽可能多地了解用户的需求和技能水平,努力使用户在操作软件的时候感觉不到差异和麻烦。为了达到这个目标,一般需要提供多种操作途径以适应各种水平的用户。 例如使用Windows下的文件管理器,对于一个初学者来说,他愿意使用鼠标和菜单一步一步地操作;而对于技术
27、专家而言,他也许更愿意使用热键来获取更高的效率。 更了不起的是,一些优秀的软件为患有疾病的人们提供了很好的用户界面。例如全世界的计算机用户中可能有成千上万的人患有色盲或色弱,他们都是正常人,但是当他们面对花花绿绿的软件时会一片茫然。因此通用的软件如浏览器、字处理软件等都要经过色盲人群的测试。设计者越为用户着想,用户就越喜欢这样的软件。设计原则7:国际化 中国已经进入了WTO,软件的国际化是大势所趋。为了能够更好地适应国内和国际市场,在设计用户界面的时候应当充分考虑语言和文化的差异。尽可能使用标准的图解方式和国际通行的语言,要求简单易懂,易于翻译,方便于不同母语的用户。特别要留意下列易变的元素:
28、字体、提示信息、在线帮助;货币、度量单位;数字、日期格式;人的名字、电话号码、通信地址;图标、标签;声音;阅读顺序或习惯; 3. 用户界面设计设计原则8:个性化 用户界面的“个性化”与“一致性”之间存在微妙的矛盾关系。对于一些非常注重安全性的商业软件(如银行软件)而言,用户界面的“一致性”要比“个性化”重要得多,因为一致的界面可以减少用户出错的几率。例如,国内所有银行的自动取款机的用户界面都是非常相似的,谁也不会想着设计一些新花样。 而对于普通的应用软件(尤其是娱乐领域的软件)而言,有个性化的界面自然比泯然于众的界面更具有吸引力。 设计人员应当根据软件的需求以及广大用户的喜好,在使用户界面具备
29、必要的“一致性”的前提下,突出该软件的“个性”。不仅让用户使用起来方便,而且对软件留下深刻的印象。 设计原则9:合理的布局 首先,界面的布局应当符合逻辑,最好能够与工作流程吻合。界面设计人员只有仔细地分析软件的需求,才能提取对界面布局有价值的信息。其次,界面的布局应当整洁(整齐清爽)。界面元素应当在水平或者垂直方向对齐,行、列的间距保持一致。窗体的尺寸要合适,各种控件不能过分拥挤也不能过分宽松。要善于利用窗体和控件的空白,以及分割用的线条。 3. 用户界面设计设计原则10:和谐的色彩 用户界面是否美观,主要取决于该界面的布局和色彩搭配。对于界面设计人员而言,实现“合理的布局”相对比较容易一些,
30、因为绝大多数的界面元素的形状已经标准化,而且界面元素的组合方式也有约定俗成的规矩可循。然而设计和谐的色彩太困难了,因为色彩的组合千变万化,并且人们对颜色的喜好也极不相同。 对于广大软件开发人员而言,虽然我们没有必要让普通软件的界面漂亮到Windows XP这种程度,但是掌握一些界面色彩的设计原则无疑是非常有益的。 (1)如果不是为了显示真实感的图形和图像,那么应当限制一帧屏幕的色彩数目,因为人们在观察屏幕的时候很难同时记住多种色彩。 (2)应当根据对象的重要性来选择颜色,重要的对象应当用醒目的色彩表示。 (3)使用颜色的时候应当保持一致性,例如错误提示信息用红色表示,正常信息用绿色表示,那么切
31、勿篡用红色和绿色。(4)在表达信息时,不要过分依赖颜色,因为有些用户是色盲或色弱。 3. 用户界面设计3.4 用户界面设计流程文档模板略示例及细节设计规则见软件工程与项目管理解析4. 数据库设计4.1 概念首先要搞清楚容易混淆的两个概念:“数据库系统”和“应用软件的数据库”。数据库系统是指数据库厂商提供的数据库服务器,目前著名的大型数据库系统有Oracle、DB2、Informix、Sybase,中型数据库系统如Microsoft SQL Server。而应用软件的数据库则是指开发者在数据库系统中创建的库,用于存储应用软件的数据。一般地,人们可以从上下文判断“数据库”究竟是指哪一个? 简而言之
32、,数据库是存储和处理数据用的。数据库设计的主要工作是:(1)设计数据库的表(数据就存在表里面),表的结构就是数据的存储结构。(2)对这些表中的数据进行操作,常见操作如查询、插入、修改、删除等。数据库设计的难易程度取决于两个要素:“数据关系的复杂程度”和“数据量的大小”。如果应用软件只涉及几张简单的表,并且数据量特别小,那么设计这样的数据库就非常容易(例如设计一个班级的学生成绩单数据库)。但是你绝对不能盲目乐观:以为所有的数据库设计都是那么简单。 从前有个财主姓万,他请了一个秀才教儿子写字。 软件开发人员学习数据库设计的特点是:入门很容易,但是成为高手非常难。大家千万不要学万公子写字噢。 4.
33、数据库设计4.2 数据库设计的主要困难与对策一、开发与平台无关的数据库应用程序 目前国际上应用最广泛的数据库系统有Oracle、DB2、Informix、Sybase和SQL Server。这些数据库系统之间的激烈竞争即有好处又有坏处。竞争的好处是使数据库系统不断发展和完善,并且避免价格垄断。竞争的最大坏处是逼迫数据库厂商不断开发出独特的功能以吸引更多的用户,所以各个数据库系统的独特功能无法形成统一标准,导致用户难以开发出与平台无关的数据库应用程序,因为用户很难抵御数据库系统独特功能的诱惑。SQL是数据库系统的标准查询语言。可是数据库厂商提供了太多超出SQL标准的特色功能,使人们陷入了进退两难
34、的境地:(1)如果你想使程序与数据库平台无关,那么只能使用SQL,放弃各个数据库系统的独特功能。(2)如果你超越SQL,使用了某个数据库系统的独特功能,那么这样的程序就是与平台相关的。 类似问题也存在于操作系统、Web浏览器这些领域。理论上讲,只有绝对垄断才能形成绝对统一的标准,但是人们既希望打破垄断又希望有统一的标准,这种矛盾无法彻底解决,只能折衷、妥协。 如果你开发的是通用的数据库应用软件,不想让应用软件与特定的数据库系统捆绑在一起,那么你就老老实实地用SQL语言写程序。 如果你开发的是行业专用的数据库应用软件,并且这个行业已经指定了数据库系统(这种局部垄断现象普遍存在),最近若干年都不会
35、改变的话,那么你可以超越SQL使用该数据库系统的独特功能。 (例如公安部采用Oracle,银行采用Informix) 4. 数据库设计二、数据库性能优化问题 数据库设计的主要挑战是“高速处理大容量的数据”。如何优化数据库的性能是设计人员经常面临的问题。数据库性能优化主要有两种途径:“优化表结构本身”和“优化数据库的环境参数”。 在表的物理设计阶段,设计人员应当按照第三范式设计表结构(即规范化处理)。这样做的好处是:表中没有冗余数据,表结构很清晰,将来修改或者扩充非常方便。但是按第三范式设计也存在一些缺点:产生了许多表,每个表有相对较少的列,并且这些列必须使用“主健/外健”关联起来,因此某个查询
36、操作可能会产生复杂的表链接,导致性能降低。 反规范化处理是指对第三范式的表进行修改,通过合并一些表,或者在表中创建冗余的列,从而减少表链接操作代价,达到提高性能的目的。要注意的是反规范化处理存在很大的负面影响:管理冗余数据很麻烦,如果冗余数据不同步的话,那么会发生数据错误这种严重的问题。 对表进行第三范式的规范化处理是第一重要的,而反规范化处理则需谨慎考虑、不宜过多使用。“规范化处理”以及“反规范化处理”不是自相矛盾之举,而是性能优化的策略。 除了优化表结构之外,优化数据库的环境参数也能够提高数据库的性能。例如给服务器配置更快的CPU,增加内存。运行数据库是非常消耗内存的,内存对数据库性能影响
37、比较大。由于现在市场上的内存条越来越便宜,所以为服务器配置足够多的内存恐怕是成本最低、难度最低、见效最快的性能优化方法。 能否有效地优化应用软件数据库的性能,主要取决于开发者对数据库系统的熟悉程度以及开发经验。 4. 数据库设计4.3 数据库设计流程数据库设计一般要经历“逻辑设计物理设计安全性设计性能优化”等步骤,通常要迭代进行。 数据库设计报告的模板见 word 文档。5. 模块设计5.1 何为“模块”与“模块化” 对于软件而言,我们习惯从功能角度描述模块。所以模块泛指软件系统的功能部件。在软件的体系结构设计完成之际,我们就已经确定了所有模块的功能,并且把模块们安放在体系结构的恰当位置上。每
38、个模块都具有特定的、明确的功能(否则不能成为模块)。人们在设计模块时应当尽量使模块的功能独立,因为功能独立的模块可以降低开发、测试、维护的代价。但是功能独立并不意味着模块是绝对孤立的。所有的模块应当能够被集成为一个系统,所以模块之间必定要交流信息、相互配合。 比如手和脚是两个“功能独立”的模块。没有脚时,手照样能干活。没有手时,脚仍可以走路。但如果想让人跑得快,那么迈左脚时一定要伸右臂甩左臂,迈右脚时则要伸左臂甩右臂。所以在设计模块时不仅要考虑“这个模块应当有什么样的功能”,还要考虑“这个模块应该怎样与其它模块交流信息”。 “模块化”(Modularization)是指:将系统分解为一系列功能
39、模块,然后逐一实现这些模块,最后把所有的模块集成为原来的系统。这样做的好处是能够大大降低系统的开发难度。是否将系统分解得非常细、得到的功能模块越多越好呢?不是的。虽然这样做可以使实现模块的代价更低,但是把功能模块集成为原来系统的代价却增大了很多,得不偿失,所以一个系统的模块数量不能过多也不能过少。那么多少算是恰如其分呢?不知道,要靠设计师的判断。 5. 模块设计5.2 模块设计原则 信息隐藏在一节不和谐的课堂里,老师叹气道:“要是坐在后排聊天的同学能象中间打牌的同学那么安静,就不会影响到前排睡觉的同学。”这个故事告诉我们,如果不想让坏事传播开来,就应该把坏事隐藏起来,家丑不可外扬就是这个道理。
40、为了尽量避免某个模块的行为干扰同一系统中的其它模块,在设计模块时就要注意信息隐藏。应该让模块仅仅公开必须要让外界知道的东西,而隐藏其它一切内容。接口设计是模块设计的核心工作之一,体现了信息隐藏这一原则。接口是模块的外部特征,应当公开;而数据结构、算法、实现体等则是模块的内部特征,应当隐藏。 高内聚内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。文献Pressman99,p249 归纳了7种内聚类型,绘制了模块的“内聚谱系”,内聚程度从低到高大致划分为低端、中段和高端。模块设计者没有必要确定内聚的精确级别,重要的是尽量争取高内聚,避免低内聚。 低耦合耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计应当争取“高内聚、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字水位仪项目申请报告
- 2025年国土资源普查核仪器项目申请报告模范
- 2024-2025学年西藏那曲市巴青县三上数学期末统考试题含解析
- 军训心得体会汇编15篇
- 2025年水上加油船项目规划申请报告模板
- 2025年放射性废气处置设备项目申请报告
- 2022装修监理年终工作总结
- 去超市实习报告范文8篇
- 住房申请书模板10篇
- 演讲竞聘演讲稿范文6篇
- 2024年云南昆明寻甸城乡投资开发集团有限公司招聘笔试参考题库含答案解析
- MOOC 家具·设计·生活-北京林业大学 中国大学慕课答案
- 黑龙江省哈尔滨市香坊区2023-2024学年八年级上学期期末语文试卷
- 教师职业道德与专业发展智慧树知到期末考试答案2024年
- 农村污水处理设施运维方案特别维护应急处理预案
- 幕墙工程专项施工方案审批流程
- 新视野英语教程(第四版)读写教程1 期末测试卷 测试卷A
- 【施工组织方案】框架结构施工组织设计
- 人工智能背景下高校智慧思政建设
- 高考物理复习讲义第88讲 电磁感应中的双杆模型(解析版)
- 市级课题研究成果案例一等奖《“教研训一体化”混合式培训模式的建构与实践》
评论
0/150
提交评论