零、前言

欢迎来到JavaScript 域驱动设计。 多年来,JavaScript 一直停留在使网站更具交互性的领域,但没有人会想到用 JavaScript 实现整个应用。 这在过去几年里发生了巨大的变化,JavaScript 已经发展成为一种无处不在的语言,几乎出现在每一个开发领域。

这种惊人的增长在开发过程中带来了许多问题,这些问题在 JavaScript 世界中以前是未知的。 项目会发展成非常大的代码库,许多开发人员同时在这些大型代码库上工作,最后,JavaScript 通常是整个应用的重要部分。 值得庆幸的是,这些问题之前都已经得到了解决,作为 JavaScript 开发人员,我们可以从多年来在其他领域获得的大量经验中吸取教训,将其应用于 JavaScript,并在此过程中充分利用 JavaScript 独特的灵活性。

这本书的内容

第 1 章A Typical JavaScript Project介绍了一个典型的商业应用及其开发过程。 它展示了领域驱动设计如何在开发过程中帮助避免常见问题,从而创建更适合问题的应用。

第 2 章发现核心问题,展示了我们如何有效地探索应用的问题域,并确定最重要的方面来工作。

第 3 章为领域驱动设计建立项目,重点是为准备成长的项目建立结构。 它不仅展示了我们如何布局文件和文件夹,还展示了如何创建正确的测试和构建环境。

第四章Actors,展示了一个项目如何使用面向对象技术和领域驱动设计来真正隔离领域。 我们还解决了计算机科学中最难的问题之一,命名。

第五章分类与实现,是我们在领域驱动设计中使用的语言,使项目易于理解和阅读。 我们将查看域和子域之间的关系,然后进一步深入到域对象的核心。

第 6 章背景图- The Big Picture不仅从技术角度发展应用,而且从组织角度发展应用。 我们讨论的是将构成应用的不同部分组织为一个整体,要么作为独立的部分,要么作为相互关联的部分。

第 7 章It's Not All the Domain-driven Design讨论了如何将领域驱动的设计融入到开发技术中,讨论了哪些问题适合于哪些领域。 我们还将讨论诸如面向对象、领域特定语言等影响因素。

第 8 章Seeing It All Come Together是关于我们的项目如何融入 JavaScript 的项目空间,回顾最初的内容。 我们还将讨论框架和开发风格的其他选择。

你写这本书需要什么

本书自始至终选用 JavaScript 作为语言。 为了提供一致的运行时环境,JavaScript Node.js 在整本书中都作为运行时使用。 也使用了 Node.js 生态系统中的其他工具,主要是 npm 作为包管理器。 为了使用书中的代码,你需要一个 Node.js 版本,该版本可从 Node.js 网站http://nodejs.org/用于 Windows、Macintosh 操作系统和 Linux。 它和 npm 是打包的。 对于编辑代码,我建议使用您最喜欢的文本编辑器或 IDE。 如果你没有,可以试试 Sublime Text 或 Vim,它们也适用于 Windows、Macintosh OS 和 Linux。

这本书是给谁的

本书假定读者对 JavaScript 语言有一定的了解。 它针对的是 JavaScript 开发人员,他们面临着不断增长的应用的问题,以及增长带来的问题。 它为领域驱动的设计提供了一种实用的方法,并着重于日常开发中最有用的部分。

会议

在本书中,您将发现许多文本样式,它们可以区分不同类型的信息。 下面是这些风格的一些例子和它们的含义的解释。

文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 url、用户输入和 Twitter 句柄如下所示:“在编写本文时,当前活动版本是node.js 0.10.33。”

代码块的设置如下:

var Dungeon = function(cells) {
  this.cells = cells
  this.bookedCells = 0
}

当我们希望您注意代码块的特定部分时,相关的行或项以粗体显示:

var dungeons = {}
Dungeon.find = function(id, callback) {
  if(!dungeons[id]) {
    dungeons[id] = new Dungeon(100)
  }

命令行输入或输出如下所示:

$ npm install g express

新词语重要词语以粗体显示。 例如,你在屏幕上看到的单词,在菜单或对话框中,会出现这样的文本:“点击Next按钮将跳转到下一个屏幕。”

注释

重要链接或重要注释出现在这样的框中。

提示

提示和技巧是这样的。

读者反馈

我们欢迎读者的反馈。 让我们知道你对这本书的看法——喜欢或不喜欢。 读者反馈对我们来说很重要,因为它可以帮助我们开发出你真正能够从中获得最大收益的游戏。

要向我们发送一般的反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在邮件的主题中提及书名。

如果你对某一主题有专长,并且你对写书或投稿感兴趣,请访问www.packtpub.com/authors查看我们的作者指南。

客户支持

现在,您是包书的骄傲所有者,我们有一些东西来帮助您从您的购买中获得最多。

下载示例代码

您可以从您的帐户http://www.packtpub.com下载您所购买的所有 Packt Publishing 书籍的示例代码文件。 如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,直接将文件通过电子邮件发送给您。

勘误表

尽管我们已经尽一切努力确保内容的准确性,但错误还是会发生。 如果您在我们的任何一本书中发现了错误——也许是文本或代码中的错误——如果您能向我们报告,我们将非常感激。 通过这样做,您可以避免其他读者感到沮丧,并帮助我们改进本书的后续版本。 如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书,点击勘误表链接,并输入勘误表的详细信息。 一旦您的勘误表得到验证,您的提交将被接受,勘误表将被上传到我们的网站,或添加到该标题勘误表部分的任何现有勘误表列表中。

要查看之前提交的勘误表,请到https://www.packtpub.com/books/content/support,并在搜索栏中输入书名。 所需信息将出现在勘误表部分下。

盗版

在互联网上盗版有版权的材料是所有媒体都存在的问题。 在 Packt,我们非常重视版权和许可的保护。 如果您在互联网上发现任何形式的我们作品的非法拷贝,请立即提供我们的地址或网站名称,以便我们采取补救措施。

请在<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,并提供疑似盗版资料的链接。

我们感谢您的帮助,以保护我们的作者和我们的能力给您带来有价值的内容。

问题

如果你对这本书的任何方面有问题,你可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们会尽力解决这个问题。