WebSharperвеб-программирование без слёзВладимир Матвеев, IntelliFactoryАнтон Таяновский, IntelliFactory
Пример дня: Excel в браузереРедактирование таблицДобавление формулСохранение данных на сервереПубликация веб-сервис интерфейса к даннымИ всё это на F# - благодаря WebSharperCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |2
Почему WebSharper?Когда пишешь JavaScript, хочется плакать:Нет вывода типов - опечатки приводят к ошибкамНет толковой среды разработкиНет стандартной платформы, библиотек, коллекцийНет стандарта упаковки модулей и документацииCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |3
Почему WebSharper?Еще хуже дело с клиент-серверными приложениями:Нужно думать о передаче данных и их упаковкеНужно привязывать скрипты, стили и HTMLCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |4
Почему F#?Функциональное программированиеВывод типовУдобная среда разработкиХорошая платформаCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |5
Комиляция F# в JavaScriptCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |6namespace HellomoduleMain =    [<JavaScript>]letrecFac n =match n with        | 0 -> 1        | n -> n * Fac (n - 1)> Hello.Main.Fac(10)3628800
Стандартная библиотекаCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |7let d = Dictionary()for (k, v) in pairs do    d.[k] <- vd
Удалённый вызовCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |8[<Rpc>]let Save (user: User) =database.Save userasync { return OK }[<JavaScript>]letAddAccount() =let user = ..async {let! response = Save userdo! Show response    }    |> Async.Start
Привязки JavaScript библиотекCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |9letconfig =JQueryUI.DialogConfiguration(Draggable = true, Modal = true,        Height = 370, Width = 500        Title = "..", CloseOnEscape = true)JQueryUI.Dialog.New(element, config)
Пользовательские привязкиCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |10[<Inline "eval($s)">]leteval (s : string) = X<_>
Функциональный подход к UICopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |11Formlet.Do {let! name = functionNamelet! text = functionTextreturn name, text}|> Formlet.Flowlet
Функциональная маршрутизацияCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |12type Actions =    | Main    | DownloadWorksheetletSitelet = Sitelet.Content "/" Main mainPage <|>Sitelet.Infer (function        | Main -> mainPage        | DownloadWorksheet -> download ())
Статическая проверка ссылокCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |13functx ->    A [Href (ctx.Link Main)] [Text "Home"]
Автоматизация зависимостейCopyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |14module Styles =    [<Sealed>]type Table() =inheritResources.BaseResource("Styles.css")[<Require(typeof<Styles.Table>)]module UI =
К делу!Copyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |15
Спасибо за внимание!http://websharper.comhttp://intellifactory.comhttp://bitbucket.org/IntelliFactory/talk-kiev-alt.net-6Copyright © 2004-2011 IntelliFactoryWebSharper @ Kiev ALT.NET #6http://www.intellifactory.com    |16

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

Editor's Notes

  • #2 Need more icons: MVC, Linq