SlideShare a Scribd company logo
1 of 37
Download to read offline
Reactive Programming
with Wicket
2016/04/28
Reactive Programming “Object Oriented Approach”を
Websシステム開発にとり⼊れた実践事例の紹介
⾃⼰紹介
仕事はJava  
Scalaが好き
Wicket歴3年
Twitter: rysh@cactaceae
話すこと
Apache Wicket
ViewとModelの分離
Object-Oriented Reactive Programming
話さないこと
Reactive Streams
Functional Reactive Programming
Reactive Extensions
Reactive Application
Wicketとは
2004年開発スタート
2015年まで⽣き残った14のJava製Web FWの⼀つ
コミニュティもまだまだ活発
なぜWicketでReactive?
⼊社時にWicketが使われていた
諸事情あり
Wicketを使ったプログラミングの効率を追求
Wicketの特徴
Swing likeなAPIでオブジェクト指向らしく書ける
Viewに使うHTMLは単体でも正しく表⽰できる
再利⽤性が⾼いComponent
AjaxにはJavaScriptを⾃動⽣成して対応
画⾯の差分更新もFWがやってくれる
Hello World
アーキテクチャ
コンポーネントベース
ステイトフル
J2EEのフィルタ上に実装され、AP Serverで動作
HTTPプロトコルをラップ(隠蔽)して意識させない
Wicketプログラミングの基本
あらゆるコンポーネントは継承による拡張が前提
Overrideして振る舞いを変える
Behaivorによる委譲も使える
匿名クラスを多⽤
WicketのComponent
HTMLタグや画⾯部品に対応したクラス
必ずComponentクラスを継承している
メンバにIDとModelを持つ
コンポジットパターンでDOMのTree構造を表現している
WicketのModel
データのWrapper
Componentに対応するViewにデータバインドで表⽰
WicketのModel
Wrapperとしての利⽤例
よくあるGUIの問題
ModelがただのWrapperなのでComponentクラス内
でデータ取得することになる
Viewのあちこちにビジネスロジックが埋め込まれる
Reactive Programming
データフロー (data flows) に着⽬
変更を伝播 (propagation of change)
Imperative Programming
b = 1
c= 2
a = b + c
b = 10
print(a) // 3が出⼒
・aは代⼊された時点の値を保持する
Reactive Programming
b = 1
c= 2
a = b + c
b = 10
print(a) // 12が出⼒
・右辺の値が変わると左辺に伝播される 

 (いつ伝播されるかは実装による)
SPEEDAのデモ
GUIのデータフロー
GUIのデータフロー
データフロー を グラフで表現
変更の伝播
データモデル間の伝播
データモデルから画⾯への伝播
ユーザーインプットをデータモデルに伝播
変更の伝播
データモデル間の伝播
データモデルから画⾯への伝播
ユーザーインプットをデータモデルに伝播
Wicketが標準機能でサポート
変更の伝播
普通は遅延評価を使って常に最新の値がとれるようにする
Javaの⾔語機能には遅延評価はない
Wicketの標準コンポーネントには
LoadableDetacheableModelというクラスがあり、

これはレンダリング時にモデルの内容を読み込むという

遅延評価を⾏っている
この遅延評価を⾏うモデルをチェインして伝播を実現
遅延評価を⾏うモデル
Wrapperとしての利⽤例
遅延評価を⾏うモデルの例
遅延評価のメリット
Wrapperの場合、初期化時に全データをロードする
遅延評価を⾏うと表⽰に使われないデータはロード
されない
制御コードを書かなくていいので可視性も向上
グラフ実装の課題と対策
愚直にグラフを実装すると全貌が⾒えづらくなる
データ同⼠の関連は画⾯の要求に基づいているた
め、バックエンドのデータモデルと乖離
MVVMパターンを適⽤しバックエンドのデータモデ
ルをそのまま利⽤。
⼀部のケースではEventを併⽤
実現できたこと
ViewとModelの⾃然な分離
⾃律的なComponentの実装
全てのComponent階層で再利⽤可能
簡潔でトレーサビリティの⾼いコード
終わり
追加のTopic
Wicketの Pros/Cons
快適にオブジェクト指向プログラミングできる
デフォルトでオンメモリキャッシュが効いているようなものなので速い
スケール/Continuous Deliveryしずらい
起源が古くAjaxやEventは後付けの設計
ドキュメントやサンプルコードは古いスタイルの物が多い
デフォルトの設定も昔の常識に沿ったままなのでいろいろ設定が必要
Wicketʼs request processing is delicate monster…
Wicketのスケールアウト
ステイトフルなのでsession情報を共有が必要
スケールしようとするとステイトフルだったメリッ
トがデメリットになって襲いかかってくる
UZABASEではSessionサーバーをnettyベースで⾃作
Eventを使うケース
Ajaxによって再描画するコンポーネントを
AjaxRequestTargetにAddする時
特定のアクションがあった時だけ評価式が変わる 時

(グラフの構造が変わる)
Wicketの⼈気は?
Wicketの⼈気は?
wicketには、英語では「⼩さな⾨」「(銀⾏などの)
格⼦窓⼝」の意味の他、クリケットで使⽤される「3本
の杭と、杭の上部に2本の横⽊を乗せた柱状のもの」
(三柱⾨)の意味がある。

Wikipediaより
Wicketの⼈気は?
Wicketの⼈気は?
察してください
終わり

More Related Content

Viewers also liked

Viewers also liked (20)

SPEEDAインフラ運営
SPEEDAインフラ運営SPEEDAインフラ運営
SPEEDAインフラ運営
 
NewsPicksでのAWS活用法
NewsPicksでのAWS活用法NewsPicksでのAWS活用法
NewsPicksでのAWS活用法
 
GCPでCI環境を構築する
GCPでCI環境を構築するGCPでCI環境を構築する
GCPでCI環境を構築する
 
企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘
企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘
企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘
 
mecab-ipadic-NEologd の効果的な使い方
mecab-ipadic-NEologd の効果的な使い方mecab-ipadic-NEologd の効果的な使い方
mecab-ipadic-NEologd の効果的な使い方
 
The monad fear
The monad fearThe monad fear
The monad fear
 
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャリアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
 
ブログをいっぱい書いていたら色々とうまくいった話
ブログをいっぱい書いていたら色々とうまくいった話ブログをいっぱい書いていたら色々とうまくいった話
ブログをいっぱい書いていたら色々とうまくいった話
 
SPEEDA/NewsPicksを支える価値を生み出す技術の選定手法
SPEEDA/NewsPicksを支える価値を生み出す技術の選定手法SPEEDA/NewsPicksを支える価値を生み出す技術の選定手法
SPEEDA/NewsPicksを支える価値を生み出す技術の選定手法
 
リアクティブプログラミング
リアクティブプログラミングリアクティブプログラミング
リアクティブプログラミング
 
[OSC2016] マイクロサービスを支える MQ を考える
[OSC2016] マイクロサービスを支える MQ を考える[OSC2016] マイクロサービスを支える MQ を考える
[OSC2016] マイクロサービスを支える MQ を考える
 
minne の API 改善
minne の API 改善minne の API 改善
minne の API 改善
 
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinAdvanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
 
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile applicationInformation sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
 

Similar to Reactive programming with Apache Wicket

[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
david9142
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
Akira Inoue
 
最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー
Akira Inoue
 
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Akira Inoue
 

Similar to Reactive programming with Apache Wicket (20)

React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
React.js + Flux
React.js + FluxReact.js + Flux
React.js + Flux
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験
 
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみたオブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
20100218
2010021820100218
20100218
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
A 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackA 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web Stack
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
 
iOSでMVVM入門
iOSでMVVM入門iOSでMVVM入門
iOSでMVVM入門
 
~初心者がこれから Web アプリの開発をするために~
~初心者がこれから Web アプリの開発をするために~~初心者がこれから Web アプリの開発をするために~
~初心者がこれから Web アプリの開発をするために~
 
最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー
 
Testing react-native with storybook on web
Testing react-native with storybook on webTesting react-native with storybook on web
Testing react-native with storybook on web
 
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
 

Reactive programming with Apache Wicket