WebSharper - веб-программирование без слёз

16
WebSharper веб-программирование без слёз Владимир Матвеев, IntelliFactory Антон Таяновский, IntelliFactory

Transcript of WebSharper - веб-программирование без слёз

Page 1: WebSharper - веб-программирование без слёз

WebSharper

веб-программирование без слёз

Владимир Матвеев, IntelliFactory

Антон Таяновский, IntelliFactory

Page 2: WebSharper - веб-программирование без слёз

Пример дня: Excel в браузере

• Редактирование таблиц

• Добавление формул

• Сохранение данных на сервере

• Публикация веб-сервис интерфейса к данным

• И всё это на F# - благодаря WebSharper

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 2

Page 3: WebSharper - веб-программирование без слёз

Почему WebSharper?

Когда пишешь JavaScript, хочется плакать:

• Нет вывода типов - опечатки приводят к ошибкам

• Нет толковой среды разработки

• Нет стандартной платформы, библиотек, коллекций

• Нет стандарта упаковки модулей и документации

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 3

Page 4: WebSharper - веб-программирование без слёз

Почему WebSharper?

Еще хуже дело с клиент-серверными приложениями:

• Нужно думать о передаче данных и их упаковке

• Нужно привязывать скрипты, стили и HTML

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 4

Page 5: WebSharper - веб-программирование без слёз

Почему F#?

• Функциональное программирование

• Вывод типов

• Удобная среда разработки

• Хорошая платформа

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 5

Page 6: WebSharper - веб-программирование без слёз

Комиляция F# в JavaScript

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 6

namespace Hello

module Main =[<JavaScript>]let rec Fac n =

match n with| 0 -> 1| n -> n * Fac (n - 1)

> Hello.Main.Fac(10)3628800

Page 7: WebSharper - веб-программирование без слёз

Стандартная библиотека

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 7

let d = Dictionary()for (k, v) in pairs do

d.[k] <- vd

Page 8: WebSharper - веб-программирование без слёз

Удалённый вызов

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 8

[<Rpc>]let Save (user: User) =

database.Save userasync { return OK }

[<JavaScript>]let AddAccount() =

let user = ..async {

let! response = Save userdo! Show response

}|> Async.Start

Page 9: WebSharper - веб-программирование без слёз

Привязки JavaScript библиотек

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 9

let config =JQueryUI.DialogConfiguration(

Draggable = true, Modal = true,Height = 370, Width = 500Title = "..", CloseOnEscape = true)

JQueryUI.Dialog.New(element, config)

Page 10: WebSharper - веб-программирование без слёз

Пользовательские привязки

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 10

[<Inline "eval($s)">]let eval (s : string) = X<_>

Page 11: WebSharper - веб-программирование без слёз

Функциональный подход к UI

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 11

Formlet.Do {let! name = functionNamelet! text = functionTextreturn name, text

}|> Formlet.Flowlet

Page 12: WebSharper - веб-программирование без слёз

Функциональная маршрутизация

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 12

type Actions =| Main| DownloadWorksheet

let Sitelet = Sitelet.Content "/" Main mainPage <|>Sitelet.Infer (function

| Main -> mainPage| DownloadWorksheet -> download ())

Page 13: WebSharper - веб-программирование без слёз

Статическая проверка ссылок

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 13

fun ctx ->A [Href (ctx.Link Main)] [Text "Home"]

Page 14: WebSharper - веб-программирование без слёз

Автоматизация зависимостей

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 14

module Styles =[<Sealed>]type Table() =

inherit Resources.BaseResource("Styles.css")

[<Require(typeof<Styles.Table>)]module UI =

Page 15: WebSharper - веб-программирование без слёз

К делу!

Copyright © 2004-2011 IntelliFactory WebSharper @ Kiev ALT.NET #6 http://www.intellifactory.com | 15