以前我无力应对失眠,直到看到软件设计原则

1 越抽象的东西越好睡

软件开发书籍中,目前为止,我觉得最好睡的是软件架构这类。其中设计原则又是架构设计的指导思想,更精炼更抽象。

和它相比,设计模式、数据结构、算法都还算具体了。当然,这类书也还是很好睡,我看这些都犯困。

2 软件设计原则的意义

软件设计原则它指导我们如何去设计软件模块,从而提高软件模块的可维护性和复用性

记住这句话,回头每个原则看完都可以来对这句话再验证一遍。

3 尝试给每条设计原则展示具体的事例

小能手在阅读设计原则时尝试对每条原则进行联想,希望能找到个贴切的事例。可例子和灵感往往可遇不可求啊。当前这篇笔记的素材我觉得有的还差点意思。

李笑来有分享过对灵感的看法,“灵感这东西,就算存在,也不会是平白无故出现的,而肯定是有来历的。灵感的出现,只不过是“量变到质变”的那一瞬间突然绽放的铁树之花。”

所以我先把笔记以略带缺憾的形态发了,让我的大脑灰质细胞对这块留点印象,也许某天更好的素材就会惊喜出现。

4 twowinter眼中的软件设计原则

SOLID原则原本不叫SOLID,《架构整洁之道》的作者Bob大叔说,是他朋友在给他写邮件时发现重新排列下这些原则,它们的首字母可以拼成SOLID。

单一职责原则(Single Responsibility Principle,SRP)

定义:任何一个软件模块都应该只对某一类行为者负责。

来到深圳后,老婆买了一个砂锅。这砂锅一般有两个职责,一个给老婆煎中药,一个是由我来做粤菜煲。这种情况下,两个职责会相互影响,煎中药的砂锅会串味,影响我煲菜的出品质量。按照设计原则呢,就得拆开,一个煎药,一个做菜,互不影响。

开闭原则(Open-Closed Principle,OCP)

定义:一个软件实体应当对扩展开放,对修改关闭。即应尽量在不修改原有软件模块的情况下进行扩展。

换个说法,就是尽量做到“热插拔”。

里氏代换原则(Liskov Substitution Principle,LSP)

定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。

类“鸟”中有个方法fly,企鹅自然也继承了这个方法,可是企鹅不能飞阿。于是,我们在企鹅的类中覆盖了fly方法,告诉方法的调用者:企鹅是不会飞的。这完全符合常理。但是,这违反了LSP,企鹅是鸟的子类,可是企鹅却不能飞!

接口隔离原则(Interface Segregation Principle,ISP)

定义:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

我觉得和SRP原则挺像的,不过SRP是针对模块职责,而这里是希望模块接口也能隔离开。

依赖倒转原则(Dependency Inversion Principle,DIP)

定义:抽象不应该依赖于细节,细节应该依赖于抽象。

换言之,要针对接口编程,而不是针对实现编程。 如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。在实现依赖倒转原则时,需要针对抽象层编程,而将具体类的对象通过依赖注入(Dependency Injection,DI)的方式注入其他对象中。依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。


IoT小能手twowinter的其他精彩文章:

* 动手创造

13块钱DIY微信小程序远程浇花神器

自制一个 LoRa PM2.5 监测器

语音控制智能家居的抽风小仓鼠

* 技术分享

LoRaEdge LR1120 卫星直连通信解读

深度报道 第1个从太空发回的LoRa信号(含视频)

无线节点的空中唤醒技术解析

* 多元学习

文档啊,最重要的还是层次感

你没中过勒索病毒,不知道备份有多重要

你可能感兴趣的:(以前我无力应对失眠,直到看到软件设计原则)