写点什么

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

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

关注

评论

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

如何根据需求选择YashanDB数据库版本

数据库砖家

基于YOLOv8的粉尘污染检测识别|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

人工智能

黑龙江等保测评:从启动到闭环的全周期流程拆解

等保测评

鸿蒙应用开发从入门到实战(五):ArkUI概述

程序员潘Sir

鸿蒙 HarmonyOS

如何进行YashanDB数据库的安全配置和管理?

数据库砖家

哈尔滨三级等保:为关键信息系统打造坚固安全防线

等保测评

CST软件时空调制非互易设备 --- 谐波平衡,变容二极管,超表面,场路结合

思茂信息

cst cst操作 cst电磁仿真 CST软件 CST Studio Suite

内网协同办公软件 BeeWorks:何以成为企业数字化底座?​

BeeWorks

即时通讯 IM 私有化部署

如何合理规划YashanDB数据库的数据分布?

数据库砖家

如何基于YashanDB设计高可用数据库架构

数据库砖家

如何减少YashanDB数据库中的数据冗余

数据库砖家

如何借助YashanDB数据库优化用户体验与服务质量

数据库砖家

如何构建基于YashanDB数据库的强大数据仓库

数据库砖家

flyway报错SLF4J: No SLF4J providers were found.或者SLF4J: Defaulting to no-operation (NOP) logger implem

刘大猫

人工智能 数据挖掘 机器学习 算法 数据分析

鸿蒙开发者孙晨阳:撬动端侧 AI 开发新可能

最新动态

Seedream 4.0生图邪修玩法大合集来啦

苍何

“鸡蛋不能放一个篮子里”,如何确保千亿数据万无一失?

poemyang

分布式 分布式系统

第二届数字经济与计算机科学国际学术会议(DECS 2025)

搞科研的小刘

数字经济 计算机科学

大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程

武子康

Java 大数据 flink spark 分布式

第六届计算机工程与智能控制国际学术会议

搞科研的小刘

计算机工程 智能控制前沿

Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商的苹果AirPods Pro3商品信息

袁袁袁袁满

爬虫 亚马逊 Python爬虫 爬虫实战

基于YashanDB实现数据快速恢复的技术分析

数据库砖家

如何快速上手YashanDB数据库管理系统?

数据库砖家

电动汽车模拟器构建指南:深入解析EVSE安全测试技术

qife122

硬件安全 电动汽车充电系统

哈尔滨等保测评公司选择:企业适配性筛选策略

等保测评

如何借助YashanDB提升电商数据库系统性能?

数据库砖家

YashanDB数据库版本升级与新特性技术指南

数据库砖家

如何构建高效的YashanDB数据备份策略?

数据库砖家

Office文档投毒技术:SHVE中的会话劫持视觉利用新突破

qife122

网络安全 Office宏

免费局域网聊天工具好用吗?BeeWorks企业IM即时通讯软件

BeeWorks

即时通讯 IM 私有化部署

安全与效率的平衡术:安全空间

权说安全

安全空间

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