zoukankan      html  css  js  c++  java
  • 设计原则分享

    丑女照片,美女照片

    大家都能一眼看出这两张图片都区别。左边丑,右边美。

    但是大家有没有想过到底是根据什么来判断丑美的呢? 都是根据美的标准,中国古代评价美不美根据这13项指标:肤、手、发、脸、目、鼻、唇、齿、颈、足、胸、腰、香。向标注靠的越近,也就越美。

    那么对于代码设计来说怎么评价美丑呢?代码设计也有评价标准的。---设计原则,符合设计原则程度越高的设计越美

    公认的设计原则有六大设计原则,

    • 一、单一职责原则
    • 二、里氏替换原则
    • 三、依赖倒置原则
    • 四、接口隔离原则
    • 五、迪米特法则
    • 六、开闭原则

    这次就给大家分享一下这六大设计原则的定义,附带个人理解,希望能给大家理解时打个辅助。

    1,开闭原则

    定义:软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的

    理解: 一个软件对象,可以在不改变源码的情况下,通过新增对象来扩展新的功能。

     遵守原则的优势 :

    1,易扩展

       扩展不需要太过关心原有功能的具体逻辑,只需要关注原有逻辑提供的扩展方式就可以开始新需求的开发

    2,易维护

      由于开发新需求不需要更改原有功能的代码,这样就可以需要过多测试就能保证原有功能的稳定性。

    难点:

    开闭原则是一种理想情况,要想做到现有架构对任何扩展都做到开闭原则是不现实的。退而求次能做到对可预期的扩展做到开闭原则就已经是优秀的设计了。

    开发项目最大的困难就是,原本架构不支持扩展的新需求。导致实现简单的新需求也很难实现,甚至要重构架构才能实现新需求。

    开发项目最大的风险就是,开发新需求的时候会对原有功能造成不可预期的影响。

    遵守开闭原则后,项目中最大的困难和最大的风险都不存在来,这样都项目开发起来不要太幸福;

    2,单一职责原则

    定义:应该有且仅有一个原因引起类的变更

    理解: 一个方法,一个类或者一个接口只有一个原因引起变化,它就只负责一件事情,也就是只有一个职责。如果一个对象,负责两个功能。但两个功能的代码耦合性很高的情况下。那么改变其中一个功能的代码时,就不能保证一定不会对另外一个功能造成影响。如果将这个对象,分成两个对象分别负责一个功能的话。改动其中一个功能时,你就可以有底气都说,绝对,对另外一个功能的代码不会造成任何影响

     遵守原则的优势 :

    1,对象的复杂性降低

       一个对象只负责一个功能的实现,那么这个对象的逻辑就会变的很简单。如果还是很复杂只能说它的职责还可继续划分

    2,可读性提高

        对象的复杂度降低了,自然就更容易读懂了

    3,可维护性提高

         对象的变的简单了,容易读懂了,自然就更容易维护了

    4,变更风险降低了

       由于功能职责单一,变更之后的影响范围降低了,存在的风险范围自然就降低了 

    难点:

    单一职责要求职责单一。但是对职责对划分是没有固定模式的。对同一事情。从不同的角度和层次出发可以做出不同的职责划分

    2,依赖倒置原则

    定义:高层模块不应该依赖底层模块,两者都应该依赖抽象;抽象不应该依赖细节;细节应该依赖抽象

    理解: 面向接口编程,就是说本来是A依赖B的。但现在A不再依赖B,而是依赖C,而B也依赖C ,C只是A和B约定的一个条约;

     遵守原则的优势 :

    1,对象的复杂性降低

       一个对象只负责一个功能的实现,那么这个对象的逻辑就会变的很简单。如果还是很复杂只能说它的职责还可继续划分

    2,可读性提高

        对象的复杂度降低了,自然就更容易读懂了

    3,可维护性提高

         对象的变的简单了,容易读懂了,自然就更容易维护了

    4,变更风险降低了

       由于功能职责单一,变更之后的影响范围降低了,存在的风险范围自然就降低了 

    难点:

    单一职责要求职责单一。但是对职责对划分是没有固定模式的。对同一事情。从不同的角度和层次出发可以做出不同的职责划分

  • 相关阅读:
    swift锁屏播放,音乐进度更新,专辑,歌手名显示
    swift Dictionary 字典
    Swift中的集合类型
    Swift String 一些常用方法
    Swift自定义Class实现Hashable
    二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))
    BZOJ1579 USACO 2009 Feb Gold 3.Revamping Trails Solution
    [DEEP LEARNING An MIT Press book in preparation]Linear algebra
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    c#-RTF文本编辑器
  • 原文地址:https://www.cnblogs.com/ldq2016/p/11397132.html
Copyright © 2011-2022 走看看