关于软件设计的原则
作者:网络转载 发布时间:[ 2013/9/11 15:17:35 ] 推荐标签:
Hollywood Principle – 好莱坞原则
好莱坞原则是一句话——“don’t call us, we’ll call you.”。意思是,好莱坞的经纪人们不希望你去联系他们,而是他们会在需要的时候来联系你。也是说,所有的组件都是被动的,所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。
简单的来讲,是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也是所谓“控制反转”的概念所在:
1.不创建对象,而是描述创建对象的方式。
2.在代码中,对象与服务没有直接联系,而是容器负责将这些联系在一起。
控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
好莱坞原则是IoC(Inversion of Control)或DI(Dependency Injection )的基础原则。这个原则很像依赖倒置原则,依赖接口,而不是实例,但是这个原则要解决的是怎么把这个实例传入调用类中?你可能把其声明成成员,你可以通过构造函数,你可以通过函数参数。但是 IoC可以让你通过配置文件,一个由Service Container 读取的配置文件来产生实际配置的类。但是程序也有可能变得不易读了,程序的性能也有可能还会下降。
参考:
http://en.wikipedia.org/wiki/Hollywood_Principle
http://en.wikipedia.org/wiki/Inversion_of_Control
High Cohesion & Low/Loose coupling & – 高内聚, 低耦合
这个原则是UNIX操作系统设计的经典原则,把模块间的耦合降到低,而努力让一个模块做到精益求精。
内聚:一个模块内各个元素彼此结合的紧密程度
耦合:一个软件结构内不同模块之间互连程度的度量
内聚意味着重用和独立,耦合意味着多米诺效应牵一发动全身。
参考:
http://en.wikipedia.org/wiki/Coupling_(computer_science)
http://en.wikipedia.org/wiki/Cohesion_(computer_science)
Convention over Configuration(CoC)– 惯例优于配置原则
简单点说,是将一些公认的配置方式和信息作为内部缺省的规则来使用。例如,Hibernate的映射文件,如果约定字段名和类属性一致的话,基本上可以不要这个配置文件了。你的应用只需要指定不convention的信息即可,从而减少了大量convention而又不得不花时间和精力?里?嗦的东东。配置文件很多时候相当的影响开发效率。
Rails 中很少有配置文件(但不是没有,数据库连接是一个配置文件),Rails 的fans号称期开发效率是 java 开发的 10 倍,估计是这个原因。Maven也使用了CoC原则,当你执行mvn -compile命令的时候,不需要指源文件放在什么地方,而编译以后的class文件放置在什么地方也没有指定,这是CoC原则。
参考:http://en.wikipedia.org/wiki/Convention_over_Configuration
Separation of Concerns (SoC) – 关注点分离
SoC 是计算机科学中重要的努力目标之一。这个原则,是在软件开发中,通过各种手段,将问题的各个关注点分开。如果一个问题能分解为独立且较小的问题,是相对较易解决的。问题太过于复杂,要解决问题需要关注的点太多,而程序员的能力是有限的,不能同时关注于问题的各个方面。正如程序员的记忆力相对于计算机知识来说那么有限一样,程序员解决问题的能力相对于要解决的问题的复杂性也是一样的非常有限。在我们分析问题的时候,如果我们把所有的东西混在一起讨论,那么只会有一个结果——乱。
我记得在上一家公司有一个项目,讨论讨论了1年多,项目本来不复杂,但是没有使用SoC,全部的东西混为一谈,再加上一堆程序员注入了各种不同的观点和想法,整个项目一下子失控了。后,本来一个1年的项目做了3年。
实现关注点分离的方法主要有两种,一种是标准化,另一种是抽象与包装。标准化是制定一套标准,让使用者都遵守它,将人们的行为统一起来,这样使用标准的人不用担心别人会有很多种不同的实现,使自己的程序不能和别人的配合。Java EE是一个标准的大集合。每个开发者只需要关注于标准本身和他所在做的事情行了。像是开发镙丝钉的人只专注于开发镙丝钉行了,而不用关注镙帽是怎么生产的,反正镙帽和镙丝钉按标来一定能合得上。不断地把程序的某些部分抽像差包装起来,也是实现关注点分离的好方法。一旦一个函数被抽像出来并实现了,那么使用函数的人不用关心这个函数是如何实现的,同样的,一旦一个类被抽像并实现了,类的使用者也不用再关注于这个类的内部是如何实现的。诸如组件,分层,面向服务,等等这些概念都是在不同的层次上做抽像和包装,以使得使用者不用关心它的内部实现细节。
说白了还是“高内聚,低耦合”。
参考:http://sulong.me/archives/99
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11