author: George Mantzouranis author_link: https://github.com/gemantzu categories: review tags: [‘phoenix’] date: 2018-08-22 layout: post title: Reviewing Functional Web Development with Elixir, OTP, and Phoenix excerpt: >

Lance Halvorsen shows us how to build our a guessing video game from the ground up using Elixir and OTP. In the end, he shows us how to build a fully working UI experience with Phoenix, Presence and Channels.

《Functional Web Development with Elixir, OTP, and Phoenix》审视

我们的第一篇评论非常受欢迎,收到的反馈非常好!

我们要感谢大家的支持,并花一点时间祝贺我们的抽奖赢家.

作为我们的评论系列的一部分,我们希望每月至少发布一篇评论。

跟随这些评论,我们希望能够提供额外的折扣和赠品。

在这个系列的下一部分,我们将评测 Lance HalvorsenFunctional Web Development with Elixir, OTP, and Phoenix

作者

Lance 从事网络专业开发已有二十年了。 在此期间,他曾使用多种语言,框架和方法。 所有这些经验都融入了他当前关于 Web 开发的思想,这些思想在本书中都有介绍。

Lance 还是《Phoenix 指南》的原始作者,也是 Phoenix 核心团队成员。

如果您想对作者和本书的内容有所了解,请查看[此精彩视频](https://www.youtube.com/watch?v=lDKCSheBc-8)

目标

这本书的目标读者是谁?没有比书中介绍更好的地方了:

从实用的角度来看,这本书是为熟悉 Elixir 和 Phoenix 并希望进一步了解这些知识的人准备的。但是本书中的想法会引起更多的共鸣。

对于那些对 OTP 有点担心的人,或者对 OTP 行为不太了解的人,这本书将使您有信心在任何应用程序中使用 OTP。

对于那些对业务逻辑和 Web 框架之间紧密耦合感到刺痛的人来说,这本书将让您永远摆脱痛苦。对于那些受传统 Web 开发束缚的人们,您将学习构建应用程序的新技术和新方法,这些将激发您的想象力。

对于那些想知道为何 Elixir 和 Phoenix 会让人觉得惊奇,您将领略到让人们如此兴奋的原因。您可能会成为路转粉!

这本书当然不适合初学者,Lance 也不讳言:

想要了解 Elixir 或 Phoenix 的读者可能需要从其他资源入手。

我们不会介绍 Elixir 的基础知识。我假设您在开始之前就知道这些。

如果您一开始不想那么快,请别担心-等你准备就绪后,我们会在这里。同时,Dave Thomas 的书《Programming Elixir 1.3》是一个很好的起点。

Phoenix 也一样。我们将仔细研究 Channels 和 Presence,但在这里您不会学习其余的 Phoenix。您应该可以在没有这些信息的情况下继续阅读本书,但是如果您要填补这部分空白,可以尝试一下阅读 Chris McCord,Bruce Tate 和 José Valim 一起编写的 《Programming Phoenix》。

评审

这本书的篇幅相当小,只有214页,是一本从头到尾涵盖了一个游戏开发的教程,一步步解释我们正在做的事情和包含的技术。

书中对游戏制作的重点让我相当感兴趣,所以还在早期 beta 版本的时候我就买了它。

这是一款标准的 2 人猜测游戏,名为 “群岛”(看起来像战舰)。每个玩家在自己的棋盘上设置少量的岛屿,然后开始猜测对手的岛屿坐标。当所有岛屿都被找到后,游戏就结束了。

如果你花时间看了上面提到的作者的视频,你就会对书中的内容有所了解。

有些东西可能会让很多读者感到惊讶。Phoenix 不是你的应用,它只是我们底层逻辑的一个展示层。

在本书中,Lance 试图帮助读者理解如何从我们的业务逻辑开始,从基础开始正确地开发一个应用程序,并从那里开始发展。

数据持久化和 UI 是后面的细节,因为它们是支持功能的必要条件。

内容的节奏相当好,这使得理解主题变得容易和愉快。

章节分析

本书共 7 章,分为 3 大部分:我们的业务逻辑、OTP 实现行为、最后添加一个 UI。

第 1 章是一个介绍,是我们前面提到的冒险路线图。

在第 1 部分中,我们专注于游戏引擎的业务逻辑。

我们在第 2 章开始设计我们的游戏实体,并在第 3 章添加一个自定义的状态机来处理我们的游戏规则。

毋庸置疑,第一部分是本书中最重要的部分。

Lance 试图迫使我们重新开动大脑:如何启动一个应用程序,而不是使用从一开始就扼杀我们的框架或数据库。

这就是红药丸,我们摆脱 mix phx.new 和其他框架让我们陷入的自满状态的方法。

在本书的第二部分,我们在系统中添加了一些重要的 OTP 行为,在第四章中添加了一个 GenServer,在第五章中添加了一个监督树。

在最后一部分,我们将介绍我们的展示层:一个基于 Web 的 UI。

在这里,我们将创建一个新的 Phoenix 应用程序,并在第 6 章中添加我们的游戏引擎作为依赖。

在第 7 章中,我们将探索 Channel 和 Presence 来完成我们工作游戏的实现。

本书的结构是基于 可扩展的知识,你从手中什么都没有开始,只是一个微型的 elixir 应用,然后开始围绕你的需求,一块一块地设计。没有任何一章让人觉得是被迫的,它的存在只是为了增加一些页数,或者只是为了介绍作者想说的东西。

结语

我非常喜欢这本书,我对手艺的看法总体上也因此改变了很多。我开始寻找在其他语言/框架中实现这种编程方式的方法(大部分是徒劳的,但你能做什么?)本书中描述的设计技术可以应用于你能想象到的每一个应用,而且它实际上使构建应用变得更容易,因为你不再考虑你的应用在细节领域(UI,数据库)。这也导致了更多可维护的代码,因为你的逻辑在框架之外,帮助你独立地工作在你的应用的核心和界面上,而不会那么容易地在一个上的改变对另一个产生副作用。

说到这里,有两点我认为会让它大获成功:测试和展示实现。

测试的使用,会是一个很流行的补充项。依靠 iex 执行和估价代码感觉很耗时,而且没有把书中鼓励的最佳实践在其他地方推广开来。虽然我理解作者使用 iex 的目的,但我并不完全相信这个想法。我认为失去了一个展示如何正确测试我们的代码的机会。在本书编写之时,曾在实用主义书架上与作者有过一次谈话,当被问及这个问题时,他回答说,他 确实 开始使用测试来编写本书,但测试开始接管了本书的内容。

第二个改进将是关于我们如何实现展示层,原因有两个。

首先,就像上面的 iex 测试一样,我不喜欢依赖浏览器中的控制台来执行和测试我的 JavaScript 代码。

通过最后一节的过程,我们写了大量的 JavaScript。

当我们在另一个浏览器中去测试我们的游戏时,我们必须对这些 JavaScript 进行编码,并通过我们的控制台再次运行它。

正确地构建和测试 JavaScript 应用程序并不是本书的重点,但我觉得还可以有更好的方法。

最后,本书在你应该开始构建 UI 的时候就结束了,并为我们提供了一些文件,让我们复制粘贴到现有的代码库里面,这样我们就可以看到最终的结果。

我们花了 180 多页的时间来了解我们为什么要这样做,而它的结尾却毫不客气地让我们从其他地方复制了大部分的前端代码。

我知道这本书主要是关于 Elixir 和 OTP 的,但在我看来,作者可以写一个最后的部分,依靠写下一些代码,并沿途多做解释。

这会导致额外的一两章,但会给那些需要它的人(比如我自己)提供更好的结局,同时允许其他人跳过它。说到这里,我觉得我可以证明作者在这一点上的选择,因为我们社区对 JS 的态度往往是咄咄逼人的,但这是另一篇文章的主题。

赠品

我们将免费赠送 3 本 Lance Halvorsen 的 《Functional Web Development with Elixir, OTP, and Phoenix实体书

想获得免费的机会吗?

请在Twitter上关注我们,并转发本博文公告! 我们将在 9 月 15 日抽取获奖者,不要错过机会!

更多评论即将到来,敬请期待!