BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用SAFE栈进行F# Web开发

| 作者 Pierre-Luc Maheu 关注 4 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2018年5月15日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

SAFE栈是一套可以用来构建Web应用程序的F#库。近日,Tomasz Heimowski在F# eXchange 2018大会的一个现场编码环节中介绍了这个栈。他在演讲中说明了创建和部署一个评估应用程序的全部过程。

SAFE栈包括:

  • Suave,一个独立Web服务器库
  • Azure
  • Fable,一个F#到Javascript的转译器
  • Elmish,一个受Elm启发的UI库

开发依赖于.NET SDK 2.0和Nodejs。运行应用程序只需要.NET Core。开始的时候,有一个模板可以用来创建一个基础的应用程序。该应用程序包含示例代码和构建文件。

dotnet new -i SAFE.Template
dotnet new SAFE
build run

Fable.Elmish提供了面向HTML元素的F#绑定。HTML元素是用F#构建的,可以在编写元素定义时设置事件处理器。

let submit (model : Model) (dispatch : Msg -> unit) =
Button.aFa
[ Button.Color IsPrimary
Button.IsFullwidth
Button.OnClick (fun _ -> dispatch Submit)
Button.IsLoading model.Loading ]
[ str "Submit" ]

SAFE模板还包含webpack用于热加载。Webpack是一个客户端模块打包器。SAFE栈感兴趣的webpack特性是“模块热替换(Hot Module Replacement)”,让应用程序可以替换应用程序的某些部分而不丢失状态。

Fable.Remoting提供了一种在客户端和服务器之间共享接口的方式。它处理在客户端和服务器端的序列化和反序列化。对象定义和服务接口位于一个不同的库中,客户端和服务器端都引用了这个库。

// 定义服务的接口
type IVotingProtocol =
  { getResults : unit -> Async<VotingResults>
  addVote : Vote -> Async<VotingResults> }

// 客户端代码使用的类型化服务定义
let api : IVotingProtocol =
  Proxy.createWithBuilder<IVotingProtocol> Route.builder

在服务器端,接口实现是使用面向Suave的Fable.Remoting辅助程序在服务器库中接入的。

let init : WebPart =
let votingProcotol : IVotingProtocol =
  { getResults = getResults
  addVote = addVote }

// 针对特定实现创建一个WebPart
FableSuaveAdapter.webPartWithBuilderFor votingProcotol Route.builder

在演讲结束时,应用程序部署到了Azure上。SAFE模板并没有直接与云提供商集成。相反,可以创建一个Docker镜像,然后部署到云提供商,在这个例子中是Azure容器。

GitHub提供了有关SAFE栈的文档和代码样例。

查看英文原文:F# Web Development With the SAFE Stack

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT