始终认为每个行业都有自己的特点,各自的专业性。一个开发工程师如果不知道电脑是哪些基本硬件组成,那么我们大概率都会认为这个人非常不专业。那么前端要不要学设计模式呢?设计模式跟前端有多大关系呢?
前端工程师首先是一个工程师,既然是一个软件工程师,那么类似设计模式、数据结构、网络相关等基础知识点都是必须的,而不是要不要学的问题,一个工程师应该具备这个领域特有的知识体系,而不是零散的知识点。
互联网的这些年,技术革命就没消停过。就比如前端来说,框架、库,从原生 JavaScript 开始写,然后写 jQuery、写 zepto、写 Angular,写写写,一直写到现在的 Vue/React 等。各个技术概念、框架、库都迭代的非常快,难道工程师的核心仅仅是会使用某某框架、库吗?难道会使用java 的程序员一定比不会用java的程序厉害吗?
能够决定一个工程师的本质的,不是这些瞬息万变的技术点,而是那些不变的东西。
不变的东西,说的就是这种驾驭技术的能力。
编码能力具体来说,它分为以下三个层次:
这三种能力在成长过程中是层层递进的关系,其中后两种能力可以说是对架构师的要求。事实上,能做到第一点并且把它做到扎实、做到娴熟的人,已经堪称同辈楷模。
用健壮的代码去解决具体的问题的能力。这个能力在软件工程领域所对标的知识体系,恰恰就是设计模式。所以,要成为一个靠谱的开发,先掌握设计模式。
维基百科中对设计模式的定义是这样的:在软件工程中,设计模式(Design Pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。
我的理解是设计模式并不是一个虚无的东西,而是经过各种软件开发人员在特定的场景下提炼出来怎么样写代码的一种思路、一种解决方案,按照他们的思路可以让代码更加容易维护、扩展。也就是通常说的健壮的代码。
设计原则是设计模式的指导理论,它可以帮助我们规避不良的软件设计。SOLID 指代的五个基本原则分别是:
在 JavaScript 设计模式中,主要用到的设计模式基本都围绕“单一功能”和“开放封闭”这两个原则来展开。
在实际开发中,不发生变化的代码可以说是不存在的。我们能做的只有将这个变化造成的影响最小化 —— 将变与不变分离,确保变化的部分灵活、不变的部分稳定,这个过程,就叫“封装变化”
。这样的代码,就是通常说的“健壮”的代码,它可以经得起变化的考验。
而设计模式出现的意义,就是帮我们写出这样的代码。设计模式的核心思想,就是“封装变化”,将变与不变分离,确保变化的部分灵活、不变的部分稳定,代码有良好的可维护性、可扩展性;
简单的说就是观察你整个逻辑里面的变与不变,然后将变与不变分离,达到使变化的部分灵活、不变的地方稳定的。
无论是创建型、结构型还是行为型,这些具体的设计模式都是在用自己的方式去封装不同类型的变化。
创建型模式:封装了创建对象过程中的变化,比如下节的工厂模式,它做的事情就是将创建对象的过程抽离;
结构型模式:封装的是对象之间组合方式、以及通信的变化,目的在于灵活地表达对象间的配合与依赖关系;
行为型模式:则将是对象千变万化的行为进行抽离,确保我们能够更安全、更方便地对行为进行更改。
参考:
《 JavaScript 设计模式》