SOLID Principles
- Intention: more understandable, easier to maintain and easier to extend.(通过良好的设计使得代码easy and simple,从而实现将复杂的事情简单化)
- S — Single responsibility principle
- every module or class should have responsibility over a single part of the functionality provided by the software
- 一个class就让它做一件事,保持类的简单
- 比如现在处理一个将输入数据处理并传送到前端的业务,在这里就至少有两个类,一个类负责数据的处理,一个类负责将数据输出成不同的形式(xml,json…)
- O — Open/closed principle
- software entities (classes, modules, functions, etc.) should be open for extensions, but closed for modification
- how to: utilizing(利用) inheritance and/or implementing interfaces that enable classes to polymorphically substitute(替代) for each other
- 当需求发生变更时优先考虑扩展(比如使用继承或实现接口产生新的class)而不是修改原有的代码
- L — Liskov substitution principle
- if S is a subtype of T, then objects of type T may be replaced (or substituted) with objects of type S.
- 确保子类在各方面都能替代父类
- 子类可以实现父类的抽象方法,但不能重写父类的非抽象方法(请考虑这种情况下怎么实现多态)
- 子类中可以增加自己特有的方法
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格
- 请考虑"正方形 IS-A 长方形"的问题(假如它们之间有继承关系,那么计算面积或者周长的时候怎么办?)
- 请考虑该原则和开闭原则之间存在的冲突(假如现在需要对父类的非抽象方法进行重写)
- I — Interface segregation principle
- Clients should not be forced to implement interfaces they do not use
- 接口应该定义得足够小,子类在实现的时候不应该觉得某个方法是多余的
- D — Dependency inversion principle
- High-level modules and low-level modules should depend on abstractions. Details should depend on abstractions.
- how to: dependency injection 使用IOC容器来管理class之间的依赖关系
SOLID Principles的更多相关文章
- The SOLID principles(未完,待续)
The SOLID principles The SOLID principles of Object Oriented Design include these five principles: S ...
- 浅谈 SOLID 原则的具体使用
SOLID 是面向对象设计5大重要原则的首字母缩写,当我们设计类和模块时,遵守 SOLID 原则可以让软件更加健壮和稳定.那么,什么是 SOLID 原则呢?本篇文章我将谈谈 SOLID 原则在软件开发 ...
- [译]开发者须知的SOLID原则
原文:SOLID Principles every Developer Should Know – Bits and Pieces SOLID Principles every devloper sh ...
- 2.1 OOP & SOLID
OOP & SOLID Implementing DDD highly relies on the Object Oriented Programming (OOP) and SOLID pr ...
- 开放封闭原则(Open Closed Principle)
在面向对象的设计中有很多流行的思想,比如说 "所有的成员变量都应该设置为私有(Private)","要避免使用全局变量(Global Variables)",& ...
- 接口分离原则(Interface Segregation Principle)
接口分离原则(Interface Segregation Principle)用于处理胖接口(fat interface)所带来的问题.如果类的接口定义暴露了过多的行为,则说明这个类的接口定义内聚程度 ...
- 依赖倒置原则(Dependency Inversion Principle)
很多软件工程师都多少在处理 "Bad Design"时有一些痛苦的经历.如果发现这些 "Bad Design" 的始作俑者就是我们自己时,那感觉就更糟糕了.那么 ...
- 里氏替换原则(Liskov Substitution Principle)
开放封闭原则(Open Closed Principle)是构建可维护性和可重用性代码的基础.它强调设计良好的代码可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码. ...
- 单一职责原则(Single Responsibility Principle)
单一职责原则(SRP:The Single Responsibility Principle) 一个类应该有且只有一个变化的原因. There should never be more than on ...
随机推荐
- HBase-概述
一种分布式.可扩展.支持海量数据存储的 NoSQL 数据库. 逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列.但从 HBase 的底层物理存储结构(K-V)来看,HB ...
- socket_timeout
https://github.com/pika/pika/blob/03542ef616a2a849e8bfb0845427f50e741ea0c6/docs/examples/using_urlpa ...
- python操作excel实用脚本
import xlrd data = xlrd.open_workbook('/home/ppe/workspace/pythonwp/tianranqi_org.xls') table = data ...
- appium-FAQ(持续更新...)
Q1:未安装APP直接启用appium sever,初始化driver :driver = new AndroidDriver(new URL("http://127.0.0.1:4723/ ...
- Java工作笔记:工作中使用JNA调用C++库的一些细节(转载)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zjutzmh/article/detai ...
- osg::NodeVisitor osg3.4.0
x:-89.4588 y:-12.1245 z:-11.7807x:-89.4588 y:-6.44823 z:-11.7807x:-89.2164 y:-9.07239 z:-11.811x:-89 ...
- 【CUDA开发】CUDA编程接口(一)------一十八般武器
子曰:工欲善其事,必先利其器.我们要把显卡作为通用并行处理器来做并行算法处理,就得知道CUDA给我提供了什么样的接口,就得了解CUDA作为通用高性能计算平台上的一十八般武器.(如果你想自己开发驱动,自 ...
- linux系统中RAID10磁盘冗余阵列配置
介绍:RAID10:需要至少四块(含)硬盘,兼具速度和安全性,但成本很高,RAID10用两个磁盘做RAID0,用其他两个做RAID1当备份. 配置流程: 第一步:在原有基础上为磁盘再填入五块磁盘(至少 ...
- python 模块import(26)
一.模块简介 python开发中,每一个.py文件都可以看作是一个模块,模块内部的函数或者方法可以被其他模块调用,至于函数或者方法是具体如何实现的,调用者不需要关心. 假如项目中既含有UI也有逻辑代码 ...
- 前端通过将json转成excel文件下载
方法一: 将table标签,包括tr.td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html,代码如下 ...