俯瞰 Java 服务端开发 (5)

编程思想是一个抽象的概念,要将其具象化我们必须透过现象看其本质,优秀的编程思想是对各种优秀想法的组织,这些想法可以精炼成许多原则,原则是构成编程思想的一个重要部分,也是所有编程方式都可以遵守的通用准则。在原则的基础上,在编码过程中反复解决的一些问题又被归纳为模式,这两者是思想的主要构成,另外也有不同的编程范式及方法论,我在这里简单的讲一下设计原则。

原则

很多原则不仅适用于编程领域,也适用于其他领域,我想这也是为什么乔布斯提倡人人都应该学习编程,因为它能让你拥有更好的思考方式。

保持简单

Keep It Simple, Stupid (KISS)

最重要的原则之一,可靠来源于简单,只有不断保持系统的简单、代码的简单,才能更好地创造优秀的软件。

You Ain’t Gonna Need It (YAGNI)

如无必要,勿增复杂性,避免过度设计。

Separation of Concerns (SoC) – 关注点分离

将目标相关联的部分封装在一起,标识为关注点。这是降低复杂性的一个重要原则,MVC 或 MVP 模式都是该原则的应用,将模型、视图和控制器作为不同的关注点,使得每一个关注点可以更有效地理解及重用。

在编码过程中,也可以应用这一思想,比如我们首先关注应用程序是否可用,当其运行正确后再关心运行效率,这比同时进行这两项工作要简单的多。

不要重复

Don’t Repeat Yourself (DRY)

最简单也最容易理解的原则,每个程序员都应该以随意复制粘贴代码而感到羞愧。

Convention over Configuration(CoC)- 惯例优于配置原则

将约定的配置方式和信息作为缺省的规则来使用,可以减少开发人员做决定的数量,减少编码量,获得简单的好处,又不会丢失灵活性。

Spring Boot 框架解决的问题之一就是简化项目的配置,其大量应用了 CoC 原则。

S.O.L.I.D 原则

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

一个类,只做一件事,并把这件事做好,其只有一个引起它变化的原因。

很简单的原则,但是很多程序员在工作时经常违反这一原则,比如一个 service 类中引入许多 dao 对象,提供多种不相关服务。

Open/Closed Principle (OCP) – 开闭原则

模块是可扩展的,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

设计模式中的代理、策略和观察者模式比较好地实现了这一原则。

当我们定义的一个API可接受函数作为参数时,实际上也是一种策略模式的变体,同样也体现了这一原则。

Liskov substitution principle (LSP) – 里氏代换原则

子类必须能够替换成它们的基类。

这个原则可作为我们设计类继承关系的基准。

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

对接口进行拆分,使用多个专门的接口比使用单一的总接口要好。

接口可以多继承,那为何要因为懒惰而将其随便定义在一个总接口里呢?

Dependency Inversion Principle (DIP) – 依赖倒置原则

高层模块不应该依赖于低层模块的实现,而是依赖于高层抽象。

IoC 是 DIP 的一个具体实现,其已经深入到编程语言当中,Spring 框架最初就只是作为一个 IoC 容器,而后才不断扩展出许多实用功能并最终成为一个开发框架。

相关原则:Hollywood Principle – 好莱坞原则(所有的组件都是被动的,所有的组件初始化和调用都由容器负责)。

高内聚、低耦合

Law of Demeter – 迪米特法则

又称“最少知识原则”(Principle of Least Knowledge),一个类对于其他类知道的越少越好,知道的越多其耦合程度就越高。

门面模式和中介模式都是迪米特法则应用的例子。

这一原则强调低耦合。

Common Closure Principle(CCP)– 共同封闭原则

如果必须修改应用程序里的代码,我们希望所有的修改都发生在一个包里(修改关闭),而不是遍布在很多包里。

在微服务架构中,若修改一个功能时,经常需要修改多个服务,那么其很有可能违反了 CCP 原则不恰当地进行了服务拆分。

这一原则强调高内聚。

Common Reuse Principle (CRP) – 共同重用原则

包的所有类被一起重用,没有被一起重用的类不应该被组合在一起。依赖一个包就是依赖这个包所包含的一切。

CCP则让系统的维护者受益,CCP让包尽可能大(CCP原则加入功能相关的类),CRP则让包尽可能小(CRP原则剔除不使用的类)。它们的出发点不一样,但不相互冲突。

这一原则同样强调高内聚。

结语

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxsff.html