写点什么

面向 JavaScript 的 SOLID 设计原则

  • 2014-01-24
  • 本文字数:849 字

    阅读完需:约 3 分钟

Derick Bailey 是一位专注于 JavaScript 的作者和开发者,他最近在 CodeMash 上发表的演讲中指出:很多开发者都使用过面向对象语言,也有很多开发者使用过JavaScript,但很少有人把面向对象原则和JavaScript 放在一起使用过。在面向对象编程中,我们会把这些基础和原则看做工作的根基,但是从基于类的静态语言转向基于松散的类型而非类的语言时,往往发现同样的原则很难应用。

Derick 宣称,为帮助开发者编写良好且稳定的 JavaScript 代码,有很多很好的原则、实践和模式可供使用,一个例子就是 Robert C. Martin 于本世纪初总结出的 SOLID 原则

Derick 把 SOLID 原则描述为可以很好地配合的五个独立模式,他还使用代码示例依次介绍了所有这些模式,同时看了一些 JavaScript 特有的风格,这些风格使得在 JavaScript 中应用 SOLID 原则与在像 Java 和 C#这样的语言中应用有点不同。

Derick 对这五种原则的定义是:

  • 单一职责原则。当需要做出修改时,原因只能有一个。这有助于帮助开发者理解所构建事物的上下文和职责,并理解何时需要修改。
  • 开放-封闭原则。行为的改变应该可以在不改变现有代码的条件下进行,例如,使用扩展点和创建可以插入的代码。
  • 里氏替换原则。派生的对象或类型必需能够替换其基类。在 Derick 看来,这是开放 - 封闭原则的一个更为专注的版本。
  • 接口隔离原则。不应该强迫客户依赖没有使用的接口。有个问题是,JS 中没有显式的接口,不过我们有些方法绕过。
  • 依赖倒转原则。考虑两个概念,抽象(Abstraction)和所有权(Ownership)。前者指的是我们应该依赖抽象,而不是依赖具体实现;后者指的是低层实现应该依赖高层概念(译者注:关于 Ownership,Derick 在演讲中提到了“细节依赖策略,而策略不依赖细节”)。

在演讲最后,Derick 指出:如果系统中有规模庞大、整整一片的代码块,SOLID 可以帮你把它们拆成单个的部分。尽管不会降低复杂性,但是会帮你创建抽象,并将细节组织为我们可以理解的更大的概念。

译者注:演讲相关的 Slides 和 JavaScript 代码下载

查看英文原文: SOLID Design Principles for JavaScript

2014-01-24 08:245781
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 136.9 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

老骥伏枥-network policy之iptables实现

Lance

分布迁移下的深度学习时间序列异常检测方法探究

云智慧AIOps社区

深度学习 异常检测 技术学习 智能运维 分布迁移

如何写出安全又可靠的PHP脚本

咔咔

php

Flink 在 58 同城的应用与实践

Apache Flink

大数据 flink

腾讯云分布式数据库TDSQL再获认可

腾讯云数据库

数据库 tdsql

为什么说腾讯云TDSQL是金融行业的“杀手锏”级应用?

腾讯云数据库

数据库 tdsql

Confluence OGNL 注入漏洞的严重安全问题

HoneyMoose

带你学会区分Scheduled Thread Pool Executor 与Timer

华为云开发者联盟

线程 线程池 Timer 任务调度 JDK 1.5

Vue进阶(幺贰陆):表格复用 TypeError: _self.$scopedSlots.default is not a function解决方法

No Silver Bullet

Vue 9月日更

Apache Hudi 在 B 站构建实时数据湖的实践

Apache Flink

大数据 flink

模块八作业

VE

架构实战营

深入解读TDSQL-C的内核关键技术

腾讯云数据库

数据库 tdsql

TDSQL-C 数据库架构

腾讯云数据库

数据库 tdsql

索信达控股:新一代金融知识图谱解决方案的落地应用和研究

索信达控股

金融科技 金融 知识图谱

啥都复用不了,还谈什么中台!

菜根老谭

中台 复用 技术管理 平台架构

OSCAR纪实:华为与开源生态伙伴协力同行,共创未来

科技热闻

ECMAScript 2021(ES12)新特性简介

程序那些事

JavaScript ecmascript 程序那些事 ES12

论亚马逊QLDB与腾讯TDSQL架构与功能

腾讯云数据库

数据库 tdsql

汽车智能座舱中 显示屏市场战略趋势分析 上篇

SOA开发者

软件定义汽车

设计消息队列存储信息数据的MySQL表格

木云先森

架构训练营

SpringMVC源码分析-HandlerAdapter(3)-RequestMappingHandlerAdapter请求处理

Brave

源码 springmvc 9月日更

TDSQL全时态数据库的价值和意义

腾讯云数据库

数据库 tdsql

架构实战营模块八作业

maybe

大力出奇迹,揭秘昇腾CANN的AI超能力

华为云开发者联盟

AI 算法 算力 CANN

揭秘腾讯TDSQL全时态数据库系统

腾讯云数据库

数据库 tdsql

亚马逊QLDB与腾讯TDSQL生产背景与模型

腾讯云数据库

数据库 tdsql

干货帖 | TDSQL-A核心架构揭秘

腾讯云数据库

数据库 tdsql

揭秘TDSQL-A分布式执行框架:解放OLAP关联分析查询性能瓶颈

腾讯云数据库

数据库 tdsql

我们应该如何过好自己这一生?

Phoenix

心理学

“十三五”新型显示重大科技成果落地对接及产业发展研讨会召开

科技热闻

37 手游基于 Flink CDC + Hudi 湖仓一体方案实践

Apache Flink

大数据 flink

面向JavaScript的SOLID设计原则_JavaScript_Jan Stenberg_InfoQ精选文章