写点什么

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

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

关注

评论

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

精彩回顾 | Serverless Developer Meetup 12.04 深圳站

阿里巴巴云原生

阿里云 开发者 云原生 severless 线下活动

2020年净利暴涨1288%,遨森电商携手DataPipeline构建实时数据融合体系跑出加速度!

DataPipeline数见科技

数据库 大数据 中间件 数据融合 数据管理

广州站 | 云原生 Serverless 技术实践营精彩回顾

阿里巴巴云原生

阿里云 Serverless 云原生 线下活动

5分钟详解什么是Redis?

Ethereal

数据库 nosql redis

拆解&组合

圣迪

数据 创新 组合 拆解 要素

如何在 Linux 中更改主机名?运维工程师应该都知道吧!

Ethereal

Linux 运维

Thanos 架构剖析(三)如何选择 Sidecar 和 Receiver

耳东@Erdong

Thanos 签约计划第二季 Sidecar Receiver

Go 语言快速入门指南:第三篇 流程控制

宇宙之一粟

for 流程控制 swith 签约计划第二季 if语句

为什么人们不喜欢 PHP?

Ethereal

精髓 一文带你了解VMware vSphere 网络、vSwitch、端口组!

Ethereal

Thanos 架构剖析(二)统一的查询入口

耳东@Erdong

Thanos query 签约计划第二季 Query Frontend

Thanos 架构剖析(六)告警规则如何管理

耳东@Erdong

Thanos 签约计划第二季 Rule

KubeDL 0.4.0 - Kubernetes AI 模型版本管理与追踪

阿里巴巴云原生

阿里云 AI Kubernetes 云原生

【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构

码界西柚

OSS Minio Minio 集群 文件服务器 12月日更

14 位大咖导师集结完毕,阿里云云原生加速器就等你来

阿里巴巴云原生

阿里云 云原生 加速器 招募活动

Dubbo3 Triple 协议简介与选型思考

阿里巴巴云原生

阿里云 云原生 dubbo HTTP 协议

Thanos 架构剖析(一)Thanos 架构总览

耳东@Erdong

架构 Thanos 签约计划第二季

Thanos 架构剖析(五)历史数据怎么办

耳东@Erdong

Thanos 签约计划第二季 compactor

神工鬼斧惟肖惟妙,M1 mac系统深度学习框架Pytorch的二次元动漫动画风格迁移滤镜AnimeGANv2+Ffmpeg(图片+视频)快速实践

刘悦的技术博客

人工智能 机器学习 深度学习 PyTorch 图像处理

实验 | OSPF HMAC-SHA 扩展身份验证

Ethereal

OSPF 网络技术 HMAC-SHA 扩展身份验证

9倍转让,外网疯抢:科技儿童汽车的前景与“钱景”

脑极体

Go 语言快速入门指南:第二篇 变量与常量

宇宙之一粟

golang 常量 变量 签约计划第二季 12月日更

Thanos 架构剖析(四)数据存储和运维工具

耳东@Erdong

store tools Thanos 签约计划第二季

45 K8S之系统扩展CRD/自定义API Server

穿过生命散发芬芳

k8s 28天写作 12月日更

用户增长模型:AARRR

石云升

AARRR 28天写作 增长黑客 12月日更

创业研发团队的氛围营造

wood

创业 管理 28天写作

改变生物学研究进程:AI模型打开生命信息密码

脑极体

【docker 总结】第三篇 - Container 容器

Brave

,docker 12月日更

底层逻辑的生命力

卢卡多多

28天写作 12月日更

阿里云 FaaS 架构设计与创新实践

阿里巴巴云原生

阿里云 Serverless 云原生 Faas

学习源码整体架构系列 | 前端

若川

内容合集 签约计划第二季 技术专题合集

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