学用 JavaScript 设计模式 已翻译 100%

gugu&gigi 投递于 2013/07/04 05:34 (共 269 段, 翻译完成于 10-05)
阅读 127987
收藏 1027
206
加载中

序言

设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。

其中一个原因是它可以让我们站在巨人的肩膀上,获得前人所有的经验,保证我们以优雅的方式组织我们的代码,满足我们解决问题所需要的条件。

设计模式同样也为我们描述问题提供了通用的词汇。这比我们通过代码来向别人传达语法和语义性的描述更为方便。

本文我们将阐述JavaScript编程语言中经典和现代的设计模式。

史涛
翻译于 2013/07/04 10:01
18

目标读者

本书的以那些期望提高自己在设计模式方面的知识并将它们应用到javascript编程语言中的专业开发者为目标读者。

一些所涉及的概念(闭包,原型继承)将假设读者具备一定程度的基本的预备知识和理解。如果你发现自己需要更深入的阅读这个话题,为了你的方便,我们提供了一个推荐书目清单。

如果你希望学习如何写出漂亮的,具有结构性和组织性的代码,我相信这本书就是为你而写。

maxos
翻译于 2013/07/04 10:34
6

致谢

我将永远感激那些审阅并帮助改进此书的有才干的技术审核人员们, 包括所有的来自社区的人士。他们带来的知识和热情简直令人惊异。官方的技术审核人员的微博和博客也是一个思想和灵感经常的来源,我诚恳的推荐并挑出它们。

我同样感谢 Rebecca Murphey (http://rebeccamurphey.com@rmurphey) 为写作此书时提供的灵感,更重要的是,继续让本书可以在GitHub上和通过O'Reilly获得。

最后,我也感谢我的好妻子,在我整理这本出版物时的不遗余力的支持。

maxos
翻译于 2013/07/04 11:06
6

编写人员列表

这本书里所包含的一些模式是基于个人经验而实现的,其中的许多模式以前都是由JavaScript社团所确认的。因此这项工作是许多开发者所有经验的结晶。类似于Stoyan Stefanov(在JavaScript 模式里)的防止插入编写人员列表而打断叙述这样的逻辑思路,我在参考资料部分列出了编写人员列表并且为所有内容建议了阅读材料。

如果任何文章或者链接没有出现在参考资料列表里,请接受我诚挚的道歉。如果你联系我的话,我将确保更新这个列表,以把你包含在这个列表里。

几点人
翻译于 2013/07/05 17:58
5

如何阅读

本书同时面向初学者和中级开发者,因此假设读者已掌握 Javascript 的基本知识。如果您要了解更多 Javascript 的相关知识,我很乐意为您推荐以下文章:

  • 《JavaScript 权威指南》(原名:JavaScript: The Definitive Guide),David Flanagan 著
  • 《JavaScript编程精解》(原名:Eloquent JavaScript), Marijn Haverbeke 著
  • 《JavaScript 模式》(原名:JavaScript Patterns),Stoyan Stefanov 著
  • 《JavaScript 语言精粹》(原名:JavaScript: The Good Parts), Douglas Crockford 著


目录

gugu&gigi
翻译于 2013/07/05 00:50
4

# 前言

写出可维护的代码的一个最重要的方面就是在代码中能够注意到重复出现的主题并对其进行优化。设计模式的知识领域是无价的。

在本书的第一部分,我们将探索那些真正可以应用于任何编程语言的设计模式的历史和重要性。如果你已经熟悉这段历史,可以直接跳过"什么是模式?"这一章继续阅读。

设计模式可以追溯到早期的一名叫Christopher Alexander的建筑师。他经常会发表一些他在处理设计问题时的经验和如何与建筑和城镇相联系的。有一天,当Alexander使用了一次又一次后,他发现某些设计结构会导致做出的效果是最好的。

小天
翻译于 2013/07/05 14:33
3

在Sara Ishikawa和Murray Silverstein的协作下,Alexander发明了一种可以帮助授权任何人去设计和构建希望的任何规模的模式语言。这在1977年的一篇名为"A Pattern Language"的论文中发表,在后来作为一本完整的精装书发表。

大约30年前,软件工程师开始将Alexander曾写过的原理并入第一版的设计模式,这是一个用来对那些想要改善他们编码技巧的新手开发者的一个指南。要注意,这时设计模式背后的概念实际上已经在编程行业成立以来就有了,虽然不是那么正式的形式。

第一个也是最标志性的关于软件工程的设计模式的正式作品是在1995年一本叫Design Patterns: Elements Of Reusable Object-Oriented Software的书中发表,这是Erich Gamma, Richard Helm, Ralph Johnson John Vlissides - 一群被称为Gang of Four(简称GoF)的人写的。

小天
翻译于 2013/07/05 15:44
3

GoF的出版物被认为是非常有助于推动设计模式的概念在我们的领域发展的,因为它描述了大量的开发技术和缺陷,而且还有在今天的世界中大量使用的23个核心的面向对象的设计模式。我们将详细地在"设计模式分类"这一章中介绍这些模式。

在本书中,我们将看到一些流行的JavaScript设计模式,并探索为什么一些特定的模式比其他的更适合你的项目。但请记住模式不仅仅可以应用在单纯的JavaScript (例如:标准JavaScript代码)里,也可以在一些像jQuerydojo的抽象库里使用。在我们开始之前,让我们看看模式在软件设计中的确切定义。

小天
翻译于 2013/07/05 15:53
3

模式是什么?

一个模式就是一个可重用的方案,可应用于在软件设计中的常见问题 - 在我们的例子里 - 就是编写JavaScript的web应用程序。模式的另一种解释就是一个我们如何解决问题的模板 - 那些可以在许多不同的情况里使用的模板。

那么理解和熟悉模式为什么是如此的重要?设计模式有以下三点好处:

  1. 模式是行之有效的解决方法:他们提供固定的解决方法来解决在软件开发中出现的问题,这些都是久经考验的反应了开发者的经验和见解的使用模式来定义的技术
  2. 模式可以很容易地重用:一个模式通常反映了一个可以适应自己需要的开箱即用的解决方案。这个特性让它们很健壮。
  3. 模式善于表达:当我们看到一个提供某种解决方案的模式时,一般有一组结构和词汇可以非常优雅地帮助表达相当大的解决方案。
小天
翻译于 2013/07/05 16:11
2
模式不是一个确切的解决方案。我们要记住模式的角色仅仅是给我们提供一个解决方案。模式不能解决所有的设计问题,也不能代替优秀的软件设计师。然而,它们在帮助我们。接下来我们将看看模式必须提供的其他的一些优势。
  • 模式的重用可以帮助防止在应用程序开发过程中出现的一些可能导致重大问题的小问题。这意味着当代码是建立在行之有效的模式上时,我们可以花更少的时间去关心我们的代码结构,从而能花更多的时间关注我们的解决方案的整体质量。这是因为模式可以鼓励我们在更好的结构化和有组织的方式下编码,这将避免在未来由于清洁的目的而去重构它。
  • 模式可以提供一个不需要绑定到一个特定问题的书面的概括性的解决方案。这个广义的方法意味着不用管我们正在处理的应用程序 (许多情况下的编程语言) 设计模式的应用可以提高我们的代码的结构。
  • 某些模式可以通过避免重复来减小我们代码的文件大小。通过鼓励开发者更仔细地看待他们的解决方案来减少重复的地方,如通过将类似的执行流程作为一个一般性的函数来减少函数的数量,这样我们就可以减小代码库的总体大小,这也成为使代码更DRY。
  • 模式增加了开发者的词汇,这使得交流更快速。
  • 经常使用的模式可通过收集其他使用这些模式的开发人员贡献给设计模式社区的经验来改进。在某些情况下,这将导致全新模式的创建,同时也可以提供改进的指导大家如何使用特定的模式才是最好的。这可以确保基于模式的解决方案继续变得比特别的解决方案更健壮。
小天
翻译于 2013/07/05 16:35
4
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(83)

50米深蓝
50米深蓝

引用来自“高跟男爵”的评论

这不是文章 也不是书 是精神
看过一遍之后你还认为是精神吗?
50米深蓝
50米深蓝
不认真就别翻了,糟蹋书不是吗?
winsywen
winsywen
Mark,正是我需要的!
打杂程序猿
打杂程序猿
有努力写js 设计模式..还不如学习用js 写函数式...
瑞新
瑞新
mark
gugu&gigi
gugu&gigi

引用来自“芈_痴”的评论

"单例和静态类不同,因为我们可以退出单例的初始化时间",
" 单例服务作为一个从全局空间的代码实现中隔离出来共享的资源空间是为了提供一个单独的函数访问指针。"
这两个地方的翻译实在是让人迷惑。

第一句中的”退出“应该是“推迟”的笔误吧? 第二句带点机器翻译 style 的翻译为:单例表现为一个共享的资源命名空间,这可以将实现代码从全局命名空间隔离开来,以便能提供单一的函数访问点。

芈_痴

"单例和静态类不同,因为我们可以退出单例的初始化时间",
" 单例服务作为一个从全局空间的代码实现中隔离出来共享的资源空间是为了提供一个单独的函数访问指针。"
这两个地方的翻译实在是让人迷惑。

Dickeylth
Dickeylth
亨元模式是什么?。。。。
superpdm
superpdm
第一段js代码后的说明翻译有错误:....用这一新的关键字创建对象...我猜应该是:用new关键字创建对象
返回顶部
顶部