速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

架构实战营模块 3 作业

梦寻解语花

架构实战营

架构实战营-模块3作业

大师兄

优柔寡断的人,能成什么大事

Kareza

个人成长 5月日更 反思总结

【LeetCode】叶子相似的树Java题解

Albert

算法 LeetCode 5月日更

消息队列架构详细设计文档

唐江

架构实战营

函数和对象的关系

顿晓

5月日更

图算法系列之计算图中最短路径

Silently9527

数据结构和算法 图算法 广度优先搜素

Nginx基础配置-资源缓存配置

梁龙先森

nginx 大前端 缓存;

STM32如何计算RTC时钟异步预分频和同步预分频

不脱发的程序猿

嵌入式 RTC stm32 单片机 ST

个站建立基础教程

Damon

网站 5月日更

STM32F103C8/BT6最小系统原理图、PCB

不脱发的程序猿

嵌入式 单片机 STM32F103C8T6 MCU ST

架构实战营模块三作业

hunk

架构实战营

密码学系列之:NIST和SHA算法

程序那些事

数据结构 密码学 程序那些事

C语言0数组\柔性数组使用介绍

良知犹存

c

消息队列设计文档

青春不可负,生活不可欺

演讲稿:项目的架构设计与模块规划

三掌柜

5月日更

模块三:课后作业

菲尼克斯

架构实战营

关于中台,聊聊我认为相对客观的三点认知

架构精进之路

中台 5月日更

Python OOP-4

若尘

面向对象 oop Python编程 5月日更

消息队列 - 架构设计文档

sN0wpeak

架构实战营

用Python帮忙找指定小说最新更新且网速最快的网站

老猿Python

Python 爬虫 编程语言 百度搜索 小说更新

读完你就知道对话式人工智能的数据采集如何解决啦!

澳鹏Appen

人工智能 自然语言处理 聊天机器人 nlp nlu

想要做网页游戏怎么办 ?PixiJs 篇(三)

空城机

大前端 游戏 pixi 5月日更

414天前,我以为这是编程玄学...

why技术

Java JVM JMM

架构实战营 模块3 课后作业

༺NPE༻

毕业前写了20万行代码,让我从成为同学眼里的面霸!

小傅哥

Java 面试 小傅哥 求职 毕业生

打破思维定式(五)

Changing Lin

5月日更

怎样使用过程自动化来实现过程的习惯性和持久性?

IPD产品研发管理

自动化 开发 CMMI

缓存系统稳定性 - 架构师峰会演讲实录

万俊峰Kevin

缓存 微服务 分布式缓存 Go 语言

秘笈分享! 24 小时无人自习室为什么这么火?

IoT云工坊

小程序 人工智能 物联网 无人自习室

百度大脑开放日厦门站-企业服务专场报名

百度大脑

百度大脑 开放日 企业服务

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