(凤凰)LiveView之美

2020-09-23 03:26:40

最近,我们一直致力于Bytepack,以帮助开发人员向公司和企业交付和销售软件包。

在Bytepack中,作者可以随时推送新的包。发布这些包是使用您常用的包管理器工具完成的,比如在Elixir中使用Mixhe.Publish或在Node.js中使用NPM Publish。一旦调用这些命令,请求就会到达实现Hex.pm和NPMAPI的特定端点。

Defmodule Bytepack Web.PackageLive.New do use Bytepack Web,:live_view def mount(params,session,socket)do socket=Authenticate(Socket,Session){:NOREPLY,Socket}end def Render(Assigns)do~L";";";...HTML模板...。";";";结束。

为了改善用户体验,我们还希望在用户发布包信息时使用它自动更新浏览器。在LiveView中实现此功能需要进行三项更改。

首先,每当创建包到用户下的“package:new”主题时,我们都会广播一个事件:

Def mount(params,session,socket)do socket=Authenticate(socket,session)if connected?(Socket)do Phoenix.PubSub。Subscribe(BytePack.PubSub,";用户:#{Socket.。指定。CURRENT_USER。Id}:Package:New";)end{:无回复,Authenticate(套接字,会话)}end。

就这样!现在,每当发布包时,我们将浏览器重定向到新创建的包页面。

为pubsub设置第三方依赖项,如redis,也不设置要大规模运行的任何其他项。

与其他人用LiveView构建的相比,这绝对是微不足道的。然而,事实是我们可以在不到2分钟的时间内设置好,这让我很兴奋!

LiveView也有自己的集成测试故事。我们可以从舒适的Elixir开始测试一切,而不需要带来像Selenium或任何Webdriver这样的重量级人物。

要在开发中运行,我们只需要启动我们的Phoenix服务器。我们在生产中也不需要外部工具。我们可以将其部署到Gigalixir,配置集群,所有操作都可以跨多个节点运行。

虽然这是LiveView功能的一个非常有限的样本,但它突出了它的模型的美,也许更重要的是,它展示了我们不需要管理或担心的所有事情。归根结底,拜LiveView的易访问性所赐,Bytepack团队可以比我们更专注于用户体验。