19. Play は Web フレームワークであ
る
• 多すぎる抽象化レイヤーは悪
• Web フレームワークは Web の開発が出来れば
よい
• Web にフォーカスしよう
• HTTP を変に抽象化するのはやめよう
20. Heroku 曰く
• Developers with experience in both Java and Ruby
web development often ask the question: Why is
web app development so complicated in Java, and
so much simpler in Ruby, with Rails?
• Java と Ruby の両方を経験している Web 開発者
はしばしば疑問に思うことがある。なぜ Java
の Web 開発はこんなにややこしいんだ?
Ruby, 特に Rails で開発するとこんなにシンプ
ルなのに。
http://blog.heroku.com/archives/2011/8/29/play/
http://d.hatena.ne.jp/ikeike443/20110830/p1
47. Web フォーカス
• もしあなたが Servlet API や Strtus のような
Java の Web フレームワークを使っているな
らば、 HTTP プロトコルを Java の奇妙な
API やコンセプトで抽象化したビューを使って
きたことになります。
• Web アプリケーションフレームワークは
HTTP とそのコンセプトに対して完全かつ容易
なアクセス手段を提供すべきです。これが Play
とその他の Java web フレームワークの根本的
な違いです。
71. PromiseInvoker の例 (Java)
public static Result index() {
Promise<Integer> promiseOfInt = Akka.future(
new Callable<Integer>() {
public Integer call() {
longComputation();
}
}
);
async(
promiseOfInt.map(
new Function<Integer,Result>() {
public Result apply(Integer i) {
77. テスタビリティ
• テンプレートもただの関数→ View をテスト可
"render index template" in {
val html = views.html.index("Coco")
contentType(html) must equalTo("text/html")
contentAsString(html) must contain("Hello Coco")
}
78. テスタビリティ
• コントローラもテスト可能
"respond to the index Action" in {
val result = controllers.Application.index("Bob")(FakeRequest())
status(result) must equalTo(OK)
contentType(result) must beSome("text/html")
charset(result) must beSome("utf-8")
contentAsString(result) must contain("Hello Bob")
}
79. テスタビリティ
• HTTP サーバを起動して Selenium WebDriver
(FluentLeniumを採用している )
"run in a browser" in {
running(TestServer(3333), HTMLUNIT) { browser =>
browser.goTo("http://localhost:3333")
browser.$("#title").getTexts().get(0) must equalTo("Hello Guest")
browser.$("a").click()
browser.$("#title").getTexts().get(0) must equalTo("Hello Coco")
}
}