【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

MyBatis(二、基础进阶)

mybatis springmvc 8月月更

Kruise Rollout:灵活可插拔的渐进式发布框架

阿里巴巴云原生

阿里云 开源 云原生 OpenKruise

【算法岗必看系列】机器学习高频面试题

码农鬼仔

人工智能 机器学习算法 机器学习笔记 机器学习/深度学习 常见面试题

RocketMQ事务消息

急需上岸的小谢

8月月更

小菜鸟河北联通上岗培训随笔

乌龟哥哥

8月月更

Java参数传递到底是按 值传递 还是 引用传递 ?

史俊锋在搬砖

Java 后端 编程基础 签约计划第三季

头脑风暴:零钱兑换2

HelloWorld杰少

算法 LeetCode 8月月更

[极致用户体验] 我做的《联机五子棋》是如何追求极致用户体验的?(上)

HullQin

CSS JavaScript html 前端 8月月更

Java 中使用 public,private 和 protected 修饰的方法

HoneyMoose

云原生(十六)| Kubernetes篇之深入RC、RS、DaemonSet、StatefulSet

Lansonli

云原生 8月月更

Android进阶(十四)Android Adapter详解

No Silver Bullet

android Adapter 8月月更

构建在Findora上的Forlend,具备隐私特性的借贷协议

鳄鱼视界

网络编程(二)TCP/IP

Albert Edison

网络编程 网络 TCP/IP 8月月更

【精通内核】计算机程序的执行原理深度解析

小明Java问道之路

内核 ELF 签约计划第三季 8月月更 方法调用

物联网数据正在改变世界

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

开源一夏|OpenHarmony中FA模型中应用包结构的参数

坚果

开源 OpenHarmony 8月月更

Android进阶(十三)json应用

No Silver Bullet

json android 8月月更

RT-Thread记录(五、RT-Thread 临界区保护与FreeRTOS的比较)

矜辰所致

RT-Thread 8月月更 临界区保护

如何可视化编写和编排你的 K8s 任务

阿里巴巴云原生

阿里云 容器 云原生 可视化

IPv6基础知识

穿过生命散发芬芳

ipv6 8月月更

介绍一个python工程师必须掌握的 CentOS 命令,nohup

梦想橡皮擦

Python 爬虫 8月月更

IntelliJ IDEA 打开近期工作的项目的对话框的快捷键

HoneyMoose

用第一性原理根治数字化转型雾霾:以规则的确定性应对结果的不确定性

三少爷的见

数字化转型 软件开发技术的第一性原理 签约计划第三季

大佬,还记得设计模式的六大设计原则吗?

知识浅谈

设计原则 8月月更

【精通内核】计算机内存地址原理深度解析

小明Java问道之路

内存 intel 签约计划第三季 8月月更 分段分页

3 分钟创建 Serverless Job 定时获取新闻热搜!

阿里巴巴云原生

阿里云 Serverless 云原生

TDengine 3.0 重磅发布,首届开发者大会圆满结束

TDengine

数据库 tdengine 时序数据库

什么是操作系统?

Jackpop

一篇就够:高性能推理引擎理论与实践(TensorRT)

AIWeker

深度学习 推理引擎 签约计划第三季 TensorRT

Redis面试总结

TimeFriends

8月月更

使用 Kitten 开发一款趣味成语接龙游戏

Jerry Wang

少儿编程 scratch 8月月更 kitten 成语接龙

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