写点什么

面向 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:246207
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

想快速解决数据问题?ETLCloud教你秒上手

谷云科技RestCloud

ETL 数据集成

95所双一流高校参与,“搜索界奥林匹克”决出28个获奖团队

极客天地

制作古风纹理的滕王阁3D模型

3D建模设计

材质贴图 纹理贴图 材质纹理 GLTF材质编辑

借助AI构建企业营销数据,锁定目标客户价值模型

用友BIP

数智营销

为 3D 模型制作纹理的 9 种最佳方法

3D建模设计

材质 纹理 贴图 3D模型纹理贴图

带你玩转 Vite + Vue3 高低版本常用玩法 | 京东云技术团队

京东科技开发者

Vue 前端 vite

每日一题:LeetCode-78. 子集

Geek_4z9ami

面试 算法 LeetCode 刷题 回溯

岳阳楼3D模型纹理贴图

3D建模设计

材质贴图 纹理贴图 材质纹理 GLTF材质编辑

如何为游戏角色3D模型设置纹理贴图

3D建模设计

材质 纹理 贴图 3D模型纹理贴图 GTLF/GLB

13 | 线性排序:如何根据年龄给100万用户数据排序?

鲁米

虚拟线程原理及性能分析

得物技术

jdk 性能优化

Flink State 状态原理解析 | 京东物流技术团队

京东科技开发者

flink 实战 state Flink State

虾皮关键词详情API接口在电商行业中的重要性及实时数据获取实现

Noah

制作木制纹理的蓬莱阁3D模型

3D建模设计

材质贴图 纹理贴图 材质纹理 GLTF材质编辑

扫盲Kafka?看这一篇就够了! | 京东云技术团队

京东科技开发者

kafka 消息队列 kafka架构

淘宝/天猫商品详情 API 的技术架构是怎样的?

技术冰糖葫芦

API 开发

提示词工程师:为AI当翻译

飞桨PaddlePaddle

人工智能

WebSocket 连接:完全指南及高效实现方法

Apifox

程序员 前端 Web 网络编程 websocket

大语言模型底层架构丨带你认识Transformer

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 大预言模型

写实3D游戏模型纹理贴图设置

3D建模设计

材质 纹理 贴图 3D模型纹理贴图

制作木制纹理的黄鹤楼3D模型

3D建模设计

gltf/glb模型 材质贴图 纹理贴图 材质纹理 GLTF材质编辑

Vue混淆与还原

让数据成为生产力,用友时序数据库为智造按下“瞬时加速键”

用友BIP

时序数据库

Wireshark中的ARP协议包分析是什么?

小齐写代码

12 月 10 日,融云在 Google DevFest 上海站等你!

融云 RongCloud

Google 即时通讯 IM 融云 Google DevFest

即时通讯技术文集(第26期):实时音视频技术合集(Part1) [共16篇]

JackJiang

网络编程 即时通讯 IM

喜报!博睿数据荣获“2023年度卓越数字创新企业”

博睿数据

可观测性 博睿数据

数据驱动:离散制造行业财务报告应用场景与实践

用友BIP

数据驱动

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