Presentation is loading. Please wait.

Presentation is loading. Please wait.

Scala + Lift フレームワーク. Scala の概要 JVM 上で動作するオブジェクト指向+関数型言 語 JVM のスケーラビリティを適用できる Java との相互利用が可能 trait を利用した多重継承( Mix-In )が可能.

Similar presentations


Presentation on theme: "Scala + Lift フレームワーク. Scala の概要 JVM 上で動作するオブジェクト指向+関数型言 語 JVM のスケーラビリティを適用できる Java との相互利用が可能 trait を利用した多重継承( Mix-In )が可能."— Presentation transcript:

1 Scala + Lift フレームワーク

2 Scala の概要 JVM 上で動作するオブジェクト指向+関数型言 語 JVM のスケーラビリティを適用できる Java との相互利用が可能 trait を利用した多重継承( Mix-In )が可能

3 Lift の概要 フルスタックの Web アプリケーションフレーム ワーク 簡潔な関数型 Web フレームワーク Snippet アプローチ View を中心としたアーキテクチャ

4 Lift の特徴 ( 抜粋 ) Lift の Comet サポートはほかに例のない優れた もので、 Ajax サポートも非常に簡単である。

5 Lift で Comet を使ったチャットアプリケーシ ョン 機能としては最小限のものとする actor ライブラリを利用する

6 チャットサーバーオブジェクトの定 義 object ChatServer extends LiftActor with ListenerManager { private var messages = List(" チャットルームへようこそ ") def createUpdate = messages override def lowPriority = { case s: String => messages ::= s ; updateListeners() } LiftActor を継承し、 ListenerManager トレイトを mixin することでリスナーを管理できる オブジェクト ( シングルトン ) として、チャットサーバーを定義。 createUpdate は updateListeners() 時に呼び出され、送信情報を返します(この場合、ポ ストされたメッセージリスト) lowPriority はメッセージが届いた際に呼び出されるメソッド。オーバーライドし、マッチ ング処理を行い、 updateListeners を呼び出す。 (low 、 medium 、 hight の三種類あるが、割愛 )

7 Chat コンポーネントの定義 class Chat extends CometActor with CometListener { private var msgs: List[String] = Nil def registerWith = ChatServer override def lowPriority = { case m: List[String] => msgs = m; reRender(false) } import scala.xml.NodeSeq def render = bind("chat", // バインディングのための名前空間 "line" -> lines _, // 関数 lines をバインド "input" -> SHtml.text("", s => ChatServer ! s)) private def lines(xml: NodeSeq): NodeSeq = msgs.reverse.flatMap(m => bind("chat", xml, "msg" -> m)) } 解説は次ページ

8 private var msgs: List[String] = Nil ローカル状態を格納する変数。 def registerWith = ChatServer ChatServer からの変更通知を受け取れるように、登録。 override def lowPriority = { case m: List[String] => msgs = m; reRender(false) } ChatServer からの変更通知時の処理。ローカル状態を更新し、 reRender(false) を呼び出す。 Comet コンポーネントのレンダリングを やり直す処理。

9 def render = bind("chat", "line" -> lines _, "input" -> SHtml.text("", s => ChatServer ! s)) private def lines(xml: NodeSeq): NodeSeq = msgs.reverse.flatMap(m => bind("chat", xml, "msg" -> m)) 名前空間 chat のタグにコンテンツをバインド。 lines の戻り値で を置き換え、 SHtml.text の戻り値で を置き換える。 SHtml オブジェクトの text メソッドは入力フィールドを返し、第一引数 は入力フィールドの初期値、第二引数はサブミット時に呼び出され る関数となる。 lines では、リストを逆順にして NodeSeq を返却する。

10 Index.html の中身

11 総評 trait による Mix-in と、 actor ライブラリを利用す ることで、 JavaScript を意識することなく、 Comet アプリケーションを作成することができ る Scala 自体が難解であるため、アプリケーショ ン作成難度自体が下がるとは言いがたい


Download ppt "Scala + Lift フレームワーク. Scala の概要 JVM 上で動作するオブジェクト指向+関数型言 語 JVM のスケーラビリティを適用できる Java との相互利用が可能 trait を利用した多重継承( Mix-In )が可能."

Similar presentations


Ads by Google