`
youyu4
  • 浏览: 435870 次
社区版块
存档分类
最新评论

设计原则

 
阅读更多

软件理论设计总结:


1. 设计原则—SOLID:S:单一职责原则;O:开放关闭原则;L:里氏替换原则;I:接口分离原则;D:依赖倒置原则。

 

参考:

http://www.cnblogs.com/shanyou/archive/2009/09/21/1570716.html

 

单一职责原则:一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。

 

      例子:

      1.  像user对象和role对象,user对象只能操作用户信息,role对象只能操作角色信息,不能越界。

      2.  像BC层和DAO层的类,BC层的类只负责接收数据、进行业务逻辑处理、输出数据,DAO层的类只负责接收数据、持久化数据、返回持久化结果。

 

      特例:

      1.  如果做一件事,一定会改变两个实体(这两个实体无法分开),那只能做在一个类中。

 

      什么时候单一职责会很容易被忽略:

      1.  敏捷开发

      2.  小型项目

 

开放关闭原则:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

 

       描述:对类的改动是通过增加代码进行的,而不是改动现有的代码。也就是说,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去,如何才能做到这一点呢?这就需要借助抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现层则是可以改变和扩展的。(通常做法是用接口或抽象类将可变化内容抽象出来

 

将可变化的内容抽象出来,使得抽象部分相对稳定?????

 

      核心:“找到系统中的可变因素,将其封装起来”。要使用----EVP(封装可变性原则)

EVP的两个要点:

1. 一种可变性不应散落在代码的很多角落,而应封装到一个对象中。
2. 一种可变性与另一种可变性不应混合在一起。

 

 

里氏替换原则:当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系

换一种说法:同一个继承体系中的对象应该有共同的行为特征。里氏替换原则关注的是怎样良好地使用继承,也就是说不要滥用继承,它是继承复用的基石。

 

 

接口分离原则:不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。

 

      例子:一个接口有85个方法,这是多么巨大的一个接口,也许这个一个根据业务组合形成的接口,如果将接口拆分成多个独立的小接口,那么可以组合使用,也可以单独使用。

 

 

依赖倒置原则

1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
2. 抽象不应该依赖于细节,细节应该依赖于抽象

       参考:http://baike.baidu.com/view/2503920.htm?fr=aladdin
 
 

2. 设计原则:封装变化、多用组合少用继承、最少知识原则、好莱坞原则;
封装变化:找出程序中会变化的方面,然后将其与固定不变的方面分离开来。
 
多用组合少用继承
1. 优先使用组合而不是继承原则的核心思想就是:优先使用组合,而不是继承。
2. 其实优先使用组合而不是继承原则的意思就是:在复用对象的时候,要优先考虑使用组合,而不是继承,这是因为在使用继承时,父类的任何改变都可能影响子类的行为,而在使用组合时,是通过获得对其他对象的引用而在运行时刻动态定义的,有助于保持每个类的单一职责原则。
 
最少知识原则:一个类不要依赖与太多的其他类。减少对象之间的交互,只留下你的“密友”。
    例子:
    1.  一个类不要有太多接口
    2. 一个类不要有太多层
 
好莱坞原则:不要给我们打电话,我们会给你打电话。
模板方法模式充分的体现了“好莱坞”原则。IOC是Inversion of Control的简称,IOC的原理就是基于好莱坞原则,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。

所有的framework都是遵循好莱坞原则设计的,否则就不叫framework。framework使用IoC的目的:
1.对基于接口编程的支持
2.减少单件和抽象工厂的依赖
3.降低业务和框架的耦合
4.业务组件可复用,可插拔

软件工程:好莱坞原则强调高层对低层的主动作用,即低层应该只管好自己的工作(具体实现),而高层自有它自己的 工作(这就是管理低层的逻辑们,或者说从client到具体实现的一系列中间逻辑),在不需要到某个低层的时候,高层并不会调用到这个具体低层,低层永远 不需要向高层作出表示,,说它需要被调用,,(即在所有的处于使用者与现有代码的中间的,用于隔离和解偶二者的,那些中间逻辑中,低层逻辑永远不要涉入高 层的实现,而只要高层通过某个逻辑去涉入低层的实现,也即低层应不要调用高层,只有高层才会去调用低层,这才是合理的,我们应尽量避免向上调用和相互调 用)


  在网络编程中,特别是server端编程时,我们可能会大量利用好莱坞原则。在 server端编程时,我们大多会利用OS提供的一些功能强大的时间分派机制,比如select/poll/epoll /WaitForMultipleObjects等,通过对这些机制的再次包装和抽象,牛人们提出了著名的reactor模式。在此模式中,我们使用者不 用关心以下事情:
1)socket什么时候建立连接
2)socket什么时候有数据带来
3)socket什么时候把数据发送
4)socket什么时候断开连接
我 们关心的是这些事件带来的时候,我们怎么处理?比如socket建立连接了,你是否要做一些log,以便以后查看。收到数据之后,你是否要做完整性验证 等。我们不用关心事件怎么来(HOW),什么时候来(WHEN),我们关心的唯一一件事是处理它(Do it)。在这里如果把reactor等抽象系统比喻成好莱坞的话,网络上的数据比喻成影片或剧本的话,我们可以把我们对数据的处理比喻成演员。这里,演员 不用去找剧本,好莱坞会带着剧本来找你,你只要乖乖着等在家里不要乱动,等剧本来了,你给我好好处理即可。

分享到:
评论

相关推荐

    系统总体设计原则汇总.doc

    以下是对各个设计原则的详细说明: 1. **系统总体设计原则**: - **统一设计原则**:这强调了在设计时需全局考虑,包括应用系统结构、数据模型、存储和扩展规划,确保一致性。 - **先进性原则**:采用成熟且先进...

    JAVA 24种设计模式介绍与6大设计原则.pdf

    而对于其他模式和原则,应以类似的方式进行学习和应用,不断深入理解每个设计模式的特点和适用场景,以及设计原则的核心指导思想,最终能够在实际开发中灵活运用,编写出高质量、高内聚低耦合、易于扩展的代码。

    触摸屏界面通用设计原则.pdf

    发现了在触摸屏界面设计上存在的问题,深感触摸屏界面可用性的重要性以及在设计中人力物力投资的重复性,从而得出了为触摸屏界面提供一套通用的设计原则的必要性。   文章开篇第一章首先说明了一下研究背景...

    android 24种设计模式介绍与6大设计原则

    在Android开发中,设计模式和设计原则是提升代码质量、可维护性和可扩展性的重要工具。以下是关于"Android 24种设计模式介绍与6大设计原则"的详细阐述: 一、六大设计原则 1. **单一职责原则(Single ...

    24种设计模式介绍与6大设计原则-PDF版 查阅方便

    这个PDF文档“24种设计模式介绍与6大设计原则”旨在帮助开发者理解和应用这些模式,提高代码的可维护性和可扩展性。以下是其中的主要内容: 一、设计原则 1. 单一职责原则:一个类或模块应只有一个引起其变化的原因...

    C++设计原则 完整整理 快速理解设计原则

    面向对象设计原则是软件开发中不可或缺的指导方针,它们旨在提升软件的可维护性和复用性,从而提高开发效率和质量。C++作为一门支持面向对象编程的语言,遵循这些原则可以使代码更加健壮和易于扩展。以下是7个常用的...

    EMI 设计原则及电磁兼容设计原则

    理解并遵循EMI设计原则和电磁兼容设计原则对于提升电路板的抗干扰性能至关重要。 首先,我们要明白EMI是指由于电路中电流的变化产生的电磁场对周围环境产生的影响,这可能会影响其他电子设备的正常工作。为了减少...

    面向对象设计原则.ppt

    面向对象设计原则是软件开发中至关重要的一环,它关乎到代码的可维护性、扩展性和复用性。本文将深入探讨这些原则,并结合实例来解释它们的重要性。 首先,我们需要理解面向对象不仅仅是编程语言中的概念,如封装、...

    面向对象设计模式设计原则

    通过以上三个面向对象的设计原则,我们可以构建出更加健壮、灵活且易于维护的软件系统。这些原则不仅适用于特定的语言环境,而且对于所有的面向对象编程语言都有普遍的意义。理解和掌握这些原则,对于提升软件开发的...

    PCB设计原则归纳整理

    高速PCB EMC设计的47个原则二、PCB设计原则归纳 原则1:PCB时钟频率超过5MHZ或信号上升时间小于5ns,一般需要使用多层板设计。 原因:采用多层板设计信号回路面积能够得到很好的控制。 原则2:对于多层板,关键...

    软件设计原则与实践

    在软件设计领域,设计原则是指导软件系统构建的基础法则和最佳实践,它们可以帮助开发者构建出更加灵活、可维护和可扩展的系统。在嵌入式系统开发中,这些原则同样适用,并且需要根据嵌入式环境的特殊性进行适当的...

    java设计 原则61条

    ### Java设计原则详解 #### 一、基本原则与实践 **原则1:避免不必要的代码重复** 根据Arthur J. Riel的观点,在设计时应当避免代码的重复。例如在第13页提到,应尽量减少相似功能模块的重写,这有助于提高代码的...

    24种设计模式介绍与6大设计原则

    24种设计模式介绍与6大设计原则24种设计模式介绍与6大设计原则

    面向对象的设计原则——类设计原则

    面向对象设计原则是软件工程领域中的重要组成部分,旨在提高软件系统的可维护性、可扩展性和灵活性。其中,类设计原则尤为关键,它们指导着开发者如何合理地构建类,以适应不断变化的需求。以下是对给定文件中提及的...

    数据采集系统设计原则与基本方法

    数据采集系统设计原则与基本方法 数据采集系统设计原则与基本方法是数据采集系统设计的基础,掌握这些原则和方法是设计高质量的数据采集系统的关键。本文将对数据采集系统设计的基本原则和方法进行详细的解释。 一...

    swift-面向对象设计的设计原则和设计模式

    设计原则和设计模式是OOD的核心概念,它们为开发者提供了指导思想和最佳实践,以创建可维护、可扩展和易于理解的代码。在Swift中,遵循这些原则和模式可以帮助我们编写出更加灵活和高效的软件。 面向对象设计的原则...

    系统总体设计原则(信息化项目).doc

    "系统总体设计原则(信息化项目)" 本文将从系统总体设计原则的角度对信息化项目的设计原则进行详细分析和解释。 1. 统一设计原则 系统总体设计原则的第一条原则是统一设计原则,这意味着在系统的建设和技术方案...

Global site tag (gtag.js) - Google Analytics