1. Intention: more understandable, easier to maintain and easier to extend.(通过良好的设计使得代码easy and simple,从而实现将复杂的事情简单化)
  2. S — Single responsibility principle
    1. every module or class should have responsibility over a single part of the functionality provided by the software
    2. 一个class就让它做一件事,保持类的简单
    3. 比如现在处理一个将输入数据处理并传送到前端的业务,在这里就至少有两个类,一个类负责数据的处理,一个类负责将数据输出成不同的形式(xml,json…)
  3. O — Open/closed principle
    1. software entities (classes, modules, functions, etc.) should be open for extensions, but closed for modification
    2. how to: utilizing(利用) inheritance and/or implementing interfaces that enable classes to polymorphically substitute(替代) for each other
    3. 当需求发生变更时优先考虑扩展(比如使用继承或实现接口产生新的class)而不是修改原有的代码
  4. L — Liskov substitution principle
    1. if S is a subtype of T, then objects of type T may be replaced (or substituted) with objects of type S.
    2. 确保子类在各方面都能替代父类
      1. 子类可以实现父类的抽象方法,但不能重写父类的非抽象方法(请考虑这种情况下怎么实现多态)
      2. 子类中可以增加自己特有的方法
      3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松
      4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格
    3. 请考虑"正方形 IS-A 长方形"的问题(假如它们之间有继承关系,那么计算面积或者周长的时候怎么办?)
    4. 请考虑该原则和开闭原则之间存在的冲突(假如现在需要对父类的非抽象方法进行重写)
  5. I — Interface segregation principle
    1. Clients should not be forced to implement interfaces they do not use
    2. 接口应该定义得足够小,子类在实现的时候不应该觉得某个方法是多余的
  6. D — Dependency inversion principle
    1. High-level modules and low-level modules should depend on abstractions. Details should depend on abstractions.
    2. how to: dependency injection 使用IOC容器来管理class之间的依赖关系

SOLID Principles的更多相关文章

  1. The SOLID principles(未完,待续)

    The SOLID principles The SOLID principles of Object Oriented Design include these five principles: S ...

  2. 浅谈 SOLID 原则的具体使用

    SOLID 是面向对象设计5大重要原则的首字母缩写,当我们设计类和模块时,遵守 SOLID 原则可以让软件更加健壮和稳定.那么,什么是 SOLID 原则呢?本篇文章我将谈谈 SOLID 原则在软件开发 ...

  3. [译]开发者须知的SOLID原则

    原文:SOLID Principles every Developer Should Know – Bits and Pieces SOLID Principles every devloper sh ...

  4. 2.1 OOP & SOLID

    OOP & SOLID Implementing DDD highly relies on the Object Oriented Programming (OOP) and SOLID pr ...

  5. 开放封闭原则(Open Closed Principle)

    在面向对象的设计中有很多流行的思想,比如说 "所有的成员变量都应该设置为私有(Private)","要避免使用全局变量(Global Variables)",& ...

  6. 接口分离原则(Interface Segregation Principle)

    接口分离原则(Interface Segregation Principle)用于处理胖接口(fat interface)所带来的问题.如果类的接口定义暴露了过多的行为,则说明这个类的接口定义内聚程度 ...

  7. 依赖倒置原则(Dependency Inversion Principle)

    很多软件工程师都多少在处理 "Bad Design"时有一些痛苦的经历.如果发现这些 "Bad Design" 的始作俑者就是我们自己时,那感觉就更糟糕了.那么 ...

  8. 里氏替换原则(Liskov Substitution Principle)

    开放封闭原则(Open Closed Principle)是构建可维护性和可重用性代码的基础.它强调设计良好的代码可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码. ...

  9. 单一职责原则(Single Responsibility Principle)

    单一职责原则(SRP:The Single Responsibility Principle) 一个类应该有且只有一个变化的原因. There should never be more than on ...

随机推荐

  1. 【Oracle/Maven】Maven导入oracle11g 自携带jdbc驱动包ojdbc6.jar到本地库

    Maven需要下载解压并添加到classpath,如果不明可以参考https://www.cnblogs.com/xiandedanteng/p/11403480.html 然后在命令行窗口执行: m ...

  2. Docs-.NET-C#-指南-语言参考-预处理器指令:#elif(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#elif(C# 参考) 1.返回顶部 1. #elif(C# 参考) 2015/07/20 #elif 可以创建复合条件指令. ...

  3. MySQL数据库之多线程备份工具mydumper

    Mydumper介绍: 1)Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具 2)特性: 轻量级C语言编写 执行速度比mysqldump快10倍 快速的文件压缩 支持导 ...

  4. 解决Jmeter跨线程组取参数值难题!(还没试)

    来源 https://mp.weixin.qq.com/s/q7ArxwnX1sOfa9tfHouSBQ 如果你工作中已经在用jmeter做接口测试,或性能测试了,你可能会遇到一个麻烦.   那就是j ...

  5. Microsoft Visual Studio(VS)启动报安装过程中无法运行

    开机启动VS提示无法运行,很可能VS正在更新,可以等待几分钟更新完成,再次运行VS. 也可以把更新进程结束,进程名:VSIXAutoUpdate.exe

  6. Ocelot+Consul 集群搭建实践

    博客园已经有很多大神写过consul集群搭建了.大家都在玩,那我也不能托后退呢 不过自己研究下还是好的.毕竟每个人遇到的问题的不同 研究过才能说自己玩过consul,文章有部分名词解释是收集网络 Co ...

  7. Win 7 环境上,ThingsBoard安装及启动

    一.参考官方网址进行Thingsboard的下载与安装, 官方教程https://thingsboard.io/docs/user-guide/install/windows/#step-2-thin ...

  8. Turbine聚合https微服务

  9. CMake生成VS2010工程相对路径和绝对路径问题说明

    CMake生成VS2010工程相对路径和绝对路径问题说明 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 主要是使用CMake生成的VS2010的工程,最好不 ...

  10. EventBus使用的坑

    最近使用eventbus发送通知,在想该怎么携带List集合数据.于是尝试直接发送List. 使用一次,正常接收.使用两次,出现类转换异常.原来在接收List类型的消息时,并不会管List内的泛型,是 ...