写点什么

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

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

关注

评论

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

“古老”茶产业碰上“年轻”区块链,能否擦出新火花?

旺链科技

区块链 产业 茶叶

数字货币量化交易平台源码搭建|量化交易所自动交易软件开发

Geek_23f0c3

去中心化交易所系统开发 量化跟单 合约量化

数字人民币银银合作以及平台接入的模式分析

CECBC

如何动手做出一个 CPU

Java 编程 架构 cpu 电脑

四十四本iOS开发书籍资料,务必赶紧保存!

iOSer

微信公众号 ios开发 iOS书籍 iOS公众号

React Native 页面浏览事件采集方案 | 数据采集

神策技术社区

大前端 后端 代码 数据采集

Go 语言, 一文彻底搞懂 map 实现原理

微客鸟窝

Go 语言 8月日更

Python代码阅读(第13篇):检测列表中的元素是否都一样

Felix

Python 编程 Code Programing 阅读代码

带你破解DDOS攻击的原理

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

短视频go研发框架实践

百度Geek说

百度 架构 后端 短视频 hulk

5秒到1秒,记一次效果“非常”显著的性能优化

Java 编程 架构 性能优化 计算机

阿里技术大牛终于分享出了解决我多年困扰的微服务开发架构文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

百度世界2021:百度大脑升级、昆仑芯2量产、智能云加速AI落地爆发

百度大脑

人工智能 百度大脑

科技平台与社会的和谐相处

CECBC

【从零开始学爬虫】采集当当网图书商品信息

前嗅大数据

大数据 爬虫 数据采集

为什么代码会有好坏?

鉴释

程序员 代码 代码规范

基于java springboot vue uniapp商城源码(毕设)

清风

Java uniapp 商城项目 毕业设计

面试侃集合 | ArrayBlockingQueue篇

码农参上

队列 8月日更

【墨天轮专访第一期】人大金仓:国产数据库的竞争本质就是人才的竞争

墨天轮

数据库 国产数据库 KingBase 人大金仓

☕【Java技术指南】「开发实战专题」Lombok插件开发实践必知必会操作!

码界西柚

Java 编译 lombok 8月日更

如何做上线前的实操演练?

boshi

项目管理

一文了解全球主要经济体对区块链技术的采纳情况和监管政策

CECBC

MySQL 系列教程之(八)DQL:子查询与表连接

若尘

MySQL 数据库 8月日更

带你读AI论文丨用于目标检测的高斯检测框与ProbIoU

华为云开发者联盟

算法 数据集 目标检测 高斯检测框 ProbIoU

【架构实战营】模块五作业

Abner S.

#架构实战营

菜谱系统小成阶段,Python Web 领域终于攻占一个小山头

梦想橡皮擦

8月日更

Swift 与 Objective-C:您应该为下一个 iOS 移动应用选择哪个语言?

iOSer

ios objective-c swift ios开发

网络安全产品之堡垒机介绍以及应用案例

行云管家

网络安全 数据安全 堡垒机 成功案例

《MySQL系列》 InnoDB行记录存储结构

Silently9527

MySQL 面试 innodb innodb行记录

赋能智慧社区,多维度提升管理质效

CECBC

地表最强:iOS安全黑宝书中文版来袭

博文视点Broadview

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