软件架构之美05架构解剖欣赏.ppt
《软件架构之美05架构解剖欣赏.ppt》由会员分享,可在线阅读,更多相关《软件架构之美05架构解剖欣赏.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PI Solution 2008年年8月月架构解剖之美架构解剖之美-类类-“编码规范编码规范”头顶三尺有神灵:写代码是在和电脑交流;是在和背后的人交流 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-2架构示意图架构示意图编码规范 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-3代码质量三要素:可读、可维护、高效率代码质量三要素:可读、可维护、高效率1.可读性规范而且好看2.可维护性 可读性支撑了可维护性,但进一步要求代码易于维护、易
2、于变更3.高效率在关键应用场景中,我们要关注代码效率 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-41.1.类组织元素声明类组织元素声明1-1:包名:包名:com.企业名称企业名称.项目名称项目名称.一级模块名称一级模块名称.二级模块名称二级模块名称.层次名称层次名称1-2:类名与接口名:业务名词:类名与接口名:业务名词+层次后缀层次后缀 1-3:常量属性、变量属性 1-4:方法名方法名1-5:局部变量:禁止使用单个字符,命名要清晰、明了,有明确含义,同时使用完整:局部变量:禁止使用单个字符,命名要清晰、明了,
3、有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。的单词或大家基本可以理解的缩写,避免使人产生误解。1-6:用正确的反义词组命名具有互斥意义的变量或相反动作的方法等。:用正确的反义词组命名具有互斥意义的变量或相反动作的方法等。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-52.2.必要的属性及变量必要的属性及变量2-12-1:去掉没必要的属性变量。:去掉没必要的属性变量。2-22-2:仔细定义并明确属性变量的含义、作用、取值范围及:仔细定义并明确属性变量的含义、作用、取值范围及属性变量间的
4、关系。属性变量间的关系。2-32-3:明确属性变量与操作此属性变量的方法的关系,如访:明确属性变量与操作此属性变量的方法的关系,如访问、修改及创建等。问、修改及创建等。2-42-4:当向属性变量赋值时,要十分小心,防止赋与不合理:当向属性变量赋值时,要十分小心,防止赋与不合理的值或越界等现象发生。的值或越界等现象发生。2-52-5:防止局部变量与属性变量同名。:防止局部变量与属性变量同名。2-62-6:给所有变量赋初始值:给所有变量赋初始值2-72-7:合理地设计数据类型,尽量减少没有必要的数据类型:合理地设计数据类型,尽量减少没有必要的数据类型默认转换与强制转换。默认转换与强制转换。2008
5、,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-63.3.必要的方法必要的方法3-13-1:方法访问权限声明,要有明确的权限控制。:方法访问权限声明,要有明确的权限控制。3-23-2:方法声明的完整性,对返回类型、参数、例外都要有明确的:方法声明的完整性,对返回类型、参数、例外都要有明确的说明。说明。3-3:明确方法功能,精确地实现方法设计 3-43-4:明确规定对接口方法参数的合法性检查应由方法的调用者负:明确规定对接口方法参数的合法性检查应由方法的调用者负责还是由接口方法本身责还是由接口方法本身负责,缺省是由方法调用者
6、负责。负责,缺省是由方法调用者负责。3-5:防止将方法的参数作为工作变量。3-6:方法的规模尽量限制在200行以内 3-7:避免方法中不必要语句,防止程序中的垃圾代码。3-83-8:避免重复代码:如果多段代码重复做同一件事情,那么在方:避免重复代码:如果多段代码重复做同一件事情,那么在方法的划分上可能存在问题。法的划分上可能存在问题。3-9:功能不明确的较小的方法,特别是仅有一个上级方法调用它时,应考虑把它合并到上级方法中,而不必单独存在 3-103-10:设计高扇入、合理扇出(小于:设计高扇入、合理扇出(小于7 7)的方法。)的方法。3-11:减少递归算法:减少方法本身或方法间的递归调用。2
7、008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-74.4.必要的注释必要的注释4-0:支持自注释,通过对类,方法、变量等正确的命名以及合理地组织代码的结构,:支持自注释,通过对类,方法、变量等正确的命名以及合理地组织代码的结构,使代码成为自注释的。使代码成为自注释的。4-1:一般情况下,源程序有效注释量必须在:一般情况下,源程序有效注释量必须在20以上以上 4-2:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注
8、释要删除。不再有用的注释要删除。4-3:注释的内容要清楚、明了,含义准确,防止注释二义性。:注释的内容要清楚、明了,含义准确,防止注释二义性。4-4:避免在注释中使用缩写,特别是非常用缩写。:避免在注释中使用缩写,特别是非常用缩写。4-5:java程序文件应该包涵下列头文件:版权说明、版本号、生成日期、作者、内容、程序文件应该包涵下列头文件:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等。功能、与其它文件的关系、修改日志等。4-6:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,
9、在声明时都必须加以注释,说明其物理含义。变量、常量的注释应放在其上方相邻位置或右方加以注释,说明其物理含义。变量、常量的注释应放在其上方相邻位置或右方 4-7:方法头部应进行注释,列出:方法的目的:方法头部应进行注释,列出:方法的目的/功能、输入参数、返回值、调用关系、功能、输入参数、返回值、调用关系、例外情况等。例外情况等。4-8:方法内注释应与其描述的代码相近,对代码的注释应放在其上方或右方(:方法内注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。对单条语句的注释)相邻位置,不可放在下面,如放于上方
10、则需与其上面的代码用空行隔开。4-9:注释与所描述内容进行同样的缩排:注释与所描述内容进行同样的缩排 4-10:对条件分支、循环语句必须编写注释:对条件分支、循环语句必须编写注释 4-11:避免在一行代码或表达式的中间插入注释:避免在一行代码或表达式的中间插入注释 4-12:在代码的功能、意图层次上进行注释,提供有用、额外的信息。:在代码的功能、意图层次上进行注释,提供有用、额外的信息。4-13:在程序块的结束行右方加注释标记,以表明某程序块的结束。:在程序块的结束行右方加注释标记,以表明某程序块的结束。4-14:注释格式:尽量统一,建议使用:注释格式:尽量统一,建议使用“/*/”。4-15:
11、注释语言:建议多使用中文,除非能用非常流利准确的英文表达。:注释语言:建议多使用中文,除非能用非常流利准确的英文表达。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-85.5.排版规范排版规范5-1:程序块要采用缩进风格编写,缩进的空格数为:程序块要采用缩进风格编写,缩进的空格数为4个。个。5-2:相对独立的程序块之间、变量说明之后必须加空行。:相对独立的程序块之间、变量说明之后必须加空行。5-3:较长的语句(:较长的语句(120字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,字符)要分成多行书写,长表
12、达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。5-4:循环、判断等语句中若有较长的表达式或语句,则要进行适当的划分,长表达式要在低优:循环、判断等语句中若有较长的表达式或语句,则要进行适当的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。先级操作符处划分新行,操作符放在新行之首。5-5:若方法中的参数较长,则要进行适当的划分。:若方法中的参数较长,则要进行适当的划分。5-6:不允许把多个短语句写在一行中,即一行只写一条语句。:不允许把多个短语句写在
13、一行中,即一行只写一条语句。5-7:if、for、do、while、case、switch、default等语句自占一行,且等语句自占一行,且if、for、do、while等等语句的执行语句部分无论多少都要加括号语句的执行语句部分无论多少都要加括号。5-8:对齐只使用空格键,不使用:对齐只使用空格键,不使用TAB键。键。5-9:方法声明,循环、判断等语句中的代码都要采用缩进风格,:方法声明,循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句语句下的情况处理语句也要遵从语句缩进要求。也要遵从语句缩进要求。5-10:程序块的分界符:程序块的分界符 和和应各独占一行并且位于同一列
14、,同时与引用它们的语句左对齐。应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在方法体的开始、类的定义、结构的定义、枚举的定义以及在方法体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。语句中的程序都要采用如上的缩进方式。5-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符
15、(如),后不应加空格。),后不应加空格。5-12:一行程序以小于:一行程序以小于120字符为宜,不要写得过长。字符为宜,不要写得过长。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-96.6.代码可读性代码可读性6-16-1:避免使用默认优先级:注意运算符的优先级,并用括:避免使用默认优先级:注意运算符的优先级,并用括号明确表达式的操作顺序。号明确表达式的操作顺序。6-26-2:避免使用不易理解的数字:用有意义的常量标识符来:避免使用不易理解的数字:用有意义的常量标识符来替代。替代。6-36-3:源程序中关系较为紧
16、密的代码应尽可能相邻。:源程序中关系较为紧密的代码应尽可能相邻。6-46-4:不要使用难懂的技巧性很高的语句,除非很有必要时。:不要使用难懂的技巧性很高的语句,除非很有必要时。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-107.7.关注程序效率关注程序效率7-17-1:编程时要经常注意代码的时间效率和空间效率。:编程时要经常注意代码的时间效率和空间效率。7-27-2:在保证软件系统的正确性、稳定性、可读性及可测性:在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。的前提下,提高代码效率。7-
17、37-3:提高空间效率的建议:不要保存无谓的数据在内存中,:提高空间效率的建议:不要保存无谓的数据在内存中,内存清理或磁盘内存清理或磁盘ioio都是很耗费效率的。都是很耗费效率的。7-47-4:关于循环的效率,不要在循环中做无谓的事情:关于循环的效率,不要在循环中做无谓的事情7-57-5:精细化算法处理:仔细分析有关算法,并进行优化,;:精细化算法处理:仔细分析有关算法,并进行优化,;但不应花过多的时间拼命地提高但不应花过多的时间拼命地提高“调用不很频繁调用不很频繁”的方法的方法代码效率。代码效率。7-67-6:不要一味追求紧凑的代码,可读性、可维护性比紧凑:不要一味追求紧凑的代码,可读性、可
18、维护性比紧凑的代码重要。的代码重要。PI Solution 2008年年8月月架构解剖之美架构解剖之美-类之间有哪些关系类之间有哪些关系-“OO-“OO面向对象面向对象”面向对象的认识论:这个世界是由对象以及对象之间的关系组成的,这是人认识世界的基本方法。软件系统反映的是客观世界,最好也用对象以及对象的关系来表述,这样人就不用思维转换了,而且系统比较稳定。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-12架构示意图架构示意图如何描述类关系 2008,PI Solution2008年年8月月探索更好的开发方法,过上
19、快乐的软件生活探索更好的开发方法,过上快乐的软件生活-131.OO1.OO理论的由来理论的由来客观世界是由事实组成的事实是由相互作用的对象组成的物理上存在的事物在人类思维中形成的概念用于沟通的信息以前的方法论中:一切都可以成为对象,使得对象的产生过于随意。通过业务建模、分析建模、设计建模形成对象,形成必要的稳定的对象模型。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-142.OO2.OO关系关系-继承继承 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,
20、过上快乐的软件生活-153.OO3.OO关系关系关联关联 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-164.OO4.OO关系关系依赖依赖 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-175.OO5.OO关系关系-实现实现接口实现PI Solution 2008年年8月月架构解剖之美架构解剖之美-如何定义类关系如何定义类关系-设计模式设计模式对共性的问题特征形成的最佳答案,被抽象模式在象棋/围棋中被称为为定式在系统设计领域,被称
21、为设计模式在RUP中被推广了,业务机制-设计机制-实现机制 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-19架构示意图架构示意图用设计模式产生类 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-201.1.设计模式的概念设计模式的概念设计模式的基本概念针对设计中特定的问题模型,提供一种或多种固定的结构模型。设计模式本身反应了一种重用的思想,那就是解决方案级别的重用。设计模式的实现手段包括:重用、接口与实现分离、结构分解。2008,P
22、I Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-212.2.设计模式概览设计模式概览 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-223.Singleton3.Singleton(创建)(创建)意图一个类只有一个实例,其状态在全局保持一致,系统可以全局访问这一个实例。解决方案效果保证单一对象实例的状态一致性有效节省内存空间全局唯一的访问控制点 2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发
23、方法,过上快乐的软件生活-234.4.(Abstract Abstract)FactoryFactory(创建)(创建)意图接口定义与实现分离,一个接口存在多种类型的实现,系统在运行时根据具体的环境条件创建具体的实现类的实例。解决方案(见右图)效果接口与实现分离后,支持了系统级的多态性,系统扩展性增强。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-245.Builder5.Builder(创建)(创建)意图将复杂对象的创建和表示分离,使得很容易创建不同的表示。解决方案(见右图)效果使得对象的创建过程透明,便于修改
24、成其它对象。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-256.Adapter(Wrapper)6.Adapter(Wrapper)(创建)(创建)意图一个类想使用两外一个类提供的服务,但是接口不匹配。一个类仅仅想实现某个接口的部分服务。解决方案(见右图)效果使得不兼容的接口类可以为另外一个类提供服务。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-267.Composite7.Composite(结构)(结构)意图“整体部分”关系
25、,以一种一致的方式操作树节点。解决方案(见右图)效果客户代码简单。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-278.Fa8.Faadeade(结构)(结构)意图为系统一组接口提供一个一致的界面。解决方案(见右图)效果屏蔽系统内部结构,使得外部系统松耦合。2008,PI Solution2008年年8月月探索更好的开发方法,过上快乐的软件生活探索更好的开发方法,过上快乐的软件生活-289.Proxy(9.Proxy(结构结构)意图Client在调用Server的service时,要求访问是受控的。解决方案(见右
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 架构 05 解剖 欣赏
限制150内