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

Mais conteúdo relacionado

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

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Share Point Workflow
Share Point WorkflowShare Point Workflow
Share Point WorkflowMaximKo
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5Microsoft
 
Building corporate portals with liferay add-2011
Building corporate portals with liferay   add-2011Building corporate portals with liferay   add-2011
Building corporate portals with liferay add-2011Alexey Kakunin
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийMedia Gorod
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011Alexey Kakunin
 
Обзор Html 5
Обзор Html 5Обзор Html 5
Обзор Html 5GetDev.NET
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about AtlasArtem Sokovets
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиковMedia Gorod
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...CocoaHeads
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...WDDay
 

Semelhante a WebSharper - веб-программирование без слёз (20)

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Share Point Workflow
Share Point WorkflowShare Point Workflow
Share Point Workflow
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5
 
Building corporate portals with liferay add-2011
Building corporate portals with liferay   add-2011Building corporate portals with liferay   add-2011
Building corporate portals with liferay add-2011
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011
 
Обзор Html 5
Обзор Html 5Обзор Html 5
Обзор Html 5
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
 
MySQL 8.0
MySQL 8.0MySQL 8.0
MySQL 8.0
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиков
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
The Best Portlet
The Best PortletThe Best Portlet
The Best Portlet
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflow
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
 

Mais de Kiev ALT.NET

Design by Contract
Design by ContractDesign by Contract
Design by ContractKiev ALT.NET
 
Micro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateMicro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateKiev ALT.NET
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive ExtensionsKiev ALT.NET
 
Continuous Integration (CI)
Continuous Integration (CI)Continuous Integration (CI)
Continuous Integration (CI)Kiev ALT.NET
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волныKiev ALT.NET
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro OverviewKiev ALT.NET
 
Введение в MVVM
Введение в MVVMВведение в MVVM
Введение в MVVMKiev ALT.NET
 
Command-Query Responsibility Segregation: теория и практика
Command-Query Responsibility Segregation: теория и практикаCommand-Query Responsibility Segregation: теория и практика
Command-Query Responsibility Segregation: теория и практикаKiev ALT.NET
 

Mais de Kiev ALT.NET (16)

CQRS EventStore
CQRS EventStoreCQRS EventStore
CQRS EventStore
 
Design by Contract
Design by ContractDesign by Contract
Design by Contract
 
Micro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateMicro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicate
 
Async
AsyncAsync
Async
 
Linq providers
Linq providersLinq providers
Linq providers
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive Extensions
 
NoSql, MongoDb
NoSql, MongoDbNoSql, MongoDb
NoSql, MongoDb
 
CouchDb
CouchDbCouchDb
CouchDb
 
Orchard
OrchardOrchard
Orchard
 
Mercurial
MercurialMercurial
Mercurial
 
CI via TFS
CI via TFSCI via TFS
CI via TFS
 
Continuous Integration (CI)
Continuous Integration (CI)Continuous Integration (CI)
Continuous Integration (CI)
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волны
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro Overview
 
Введение в MVVM
Введение в MVVMВведение в MVVM
Введение в MVVM
 
Command-Query Responsibility Segregation: теория и практика
Command-Query Responsibility Segregation: теория и практикаCommand-Query Responsibility Segregation: теория и практика
Command-Query Responsibility Segregation: теория и практика
 

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

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

Notas do Editor

  1. Need more icons: MVC, Linq