浅谈物件导向 SOLID 原则对工程师的好处与如何影响能力

前言

为了感谢部落格一直以来都有人在阅读,让我一直有经营下去的动力。所以想写一个系列 学习 SOLID 原则 2 年后的心得文章。这心得文章包含自己使用 SOLID 两年的总结,并且以自己的理解简化 SOLID 原则,希望帮助新手工程师缩短「SOLID 原则是文字天书」的时间。

从第一次接触 物件导向 SOLID 原则 至今已经两年了,一开始觉得「SOLID 原则是文字天书」,到现在 Coding 时常融入 SOLID 的思想来「设计」程式。

所以 SOLID 原则到底是什么?

》SOLID 原则其实是物件导向「设计层面」的思维与定律。

大学时期程式设计课程中所学的物件导向,其实只是在介绍程式语言有提供 物件导向的哪些特性,却 从未有人教导如何透过物件导向的特性撰写程式码,甚至没人告诉你为什么要用物件导向开发程式。

然而 SOLID 原则就是物件导向开发的指导方针,若以多个角度来看这些原则,会发现 SOLID 已经指出 物件导向的优点 以及 程序式程式码隐晦的缺点。但这不代表物件导向没有缺点,要是没有妥善运用 SOLID 原则的话,物件导向对专案的伤害绝对不比 程序式程式码 低!但这留给后续的文章来解释,首先来看看 SOLID 的好处与重要性。

SOLID 原则对专案的好处?

SOLID 原则对专案的影响很大,当专案一点一滴的导入 SOLID 原则的程式码,不少複杂的程式码慢慢被简化,被简化的程式码可以降低複杂度,读懂程式码的时间从原本需要花 20 分钟阅读,到只需要花费 2 分钟阅读。缩短阅读时间对专案来说是一件好事,一般来说工程师「阅读程式码」的时间常常大于「新增/修改程式码」的时间,毕竟要先读懂才能动手嘛,因此 缩短阅读程式码时间 等于 **缩短「新增/修改程式码」**程式码的时间。

优点:降低程式码複杂度 => 缩短阅读程式码的时间 => 减少维护专案程式码的时间

你可能会觉得,为什么 SOLID 原则可以降低程式码的複杂度?

因为 物件导向本身的目的就是管理「程式码複杂度」,这也是为什么这么多人推崇使用物件导向开发的原因,然而 SOLID 原则是教导工程师应该如何透过 物件导向的特性 来管理程式码的複杂度。

SOLID 原则对工程师的好处?

由上述可知 SOLID 原则可以降低程式码的複杂度,这是第一个好处,因为降低工程师开发过程的痛苦值!(应该没人想一直面对丑陋複杂的程式码)

再来的好处可多的呢!为什么这么说呢?
SOLID 原则是踏入资深工程师阶段的必学观念。大部分 软体开发的进阶观念,都建构在良好的物件导向程式码之上。要是没办法妥善运用物件导向,就没办法运用软体开发的进阶观念/技巧。

》这相当重要,若工程师没有能力学习进阶观念,很可能就会一直停留在码农阶段。

但是学会 SOLID 原则之后呢?

以下列出 SOLID 未来的应用,下列被提及的每个议题都是 进阶物件导向重要的基石,很值得花时间投资:

1. 单元测试

用程式码撰写测试程式,取代手动测试。替专案提供回归测试,时时刻刻执行单元测试,检查有没有人改坏程式码。符合 SOLID 原则的程式码可以轻易导入单元测试。

2. 重构

在不改变程式码外部行为的前提下,修改程式码内部的结构,提升可读性与扩充性。重构必然会搭配测试,避免改坏程式码。低阶重构:把烂 Code 重构成符合物件导向 SOLID 原则(敏捷开发)。中阶重构:把 SOLID 重构成设计模式(敏捷开发)。高阶重构:把 SOLID 重构成软体架构(敏捷开发)。

3. 设计模式

进阶物件导向应用学习 物件与物件之间常见的组合模式。用来管理程式码的複杂度,或解决开发系统中的各种常见问题。学过设计模式,在写程式或阅读程式的时候,会用更高一层的视角去思考。最后会培养出根深蒂固的抽象观念。

》但这些议题却又基于 SOLID 原则之上

因为 SOLID 原则帮助专案建立一个乾净、稳定、良好的物件导向程式码,让这些物件导向程式码可以引入更进阶的概念/技巧。

这裏引用 Uncle Bob 在 物件导向原则、设计模式与C#实践 这本书说过的话:

我的书里所教的观念与技巧,都只对乾净的 Code 有效益。如果你的程式码还很杂乱,请先学会怎么整理程式码。 - Uncle Bob(现代软体界大神)

然而 这本书也是 SOLID 的原点。软体开发的观念几乎就围绕在上述几个议题在发展,因此有没有学会上述议题,基本上就是码农跟中高阶工程师的分水岭。如果持续努力学习这些议题,马上就能 凸显跟大部分工程师的差异性,面试时可以谈的条件也会变多。

我自己的学习路线如下:

SOLID > 重构 + 单元测试 > 设计模式 > 测试驱动开发(TDD) > 行为驱动开发(BDD) > 领域驱动开发(DDD)

但是真实的学习过程其实经常交叉学习,不一定是先学完前者才往下学习下一个。因为这些议题都是环环相扣,常常可以在后面的议题学习到前面议题的进阶用法。

结尾:

以往学习 SOLID 原则时,大部分文章都专注在每个原则的介绍与範例,却几乎没人提及 SOLID 原则与物件导向之间的关係,以及 SOLID 原则日后的发展为何?
因此我想在讲解 SOLID 每个原则之前,先花篇幅琢磨在两个问题上。希望也能替其他人解开疑问。

接下来也将会陆续推出讲解 SOLID 每个原则的文章出现,没意外的话下次 PO 文是探讨 单一职责原则。

此文章也会同步到:我的部落格

系列文章

浅谈物件导向 SOLID 原则对工程师的好处与如何影响能力再谈 SOLID 原则,Why SOLID?物件导向设计原则:单一职责原则,定义、解析与实践物件导向设计原则:开放封闭原则,定义、解析与实践

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章