Play framework橫空出世

banq發表於2009-10-21
顛覆臃腫的JavaEE開發框架(bloated Enterprise Java stacks)的Play框架1.0釋出,它在很多方面有其革命性的獨創,也有助於我們瞭解現在JavaEE框架的不足。

Play框架吸收PHP RUBY動態語言的特點,採取即時原始碼編寫,即時啟用,框架本身融合了編譯器和伺服器。取代了 compile-package-deploy 過程,提高產品的開發效率。Play框架甚至提供線上編輯器,線上修改BUG後即時投入應用。

架構有如下特點:
1. Simple stateless MVC architecture 簡單的無狀態MVC架構

Play框架認為一邊是資料庫儲存狀態,一邊是瀏覽器也可以儲存狀態,那麼還要中介軟體MVC儲存Session狀態幹什麼呢?

HttpSession有很多問題,雖然可以處理針對某個使用者的狀態,但是萬一使用者中途離開怎麼辦,HttpSession對資源消耗,以及在可伸縮性方面是有問題的。

Play框架秉承share nothing架構思想,不再象駭客那樣破解原本自然正常Http模型,然後強行植入狀態,無狀態架構可以並行同時輸出多個頁面,提高Web效能。

2 。HTTP-to-code mapping
眾所周知的Servlet API 和Struts其實是扭曲的,使用奇怪的API將Http協議隱藏起來,Play框架認為一個Web應用框架應該給用完整的 直接的對Http呼叫和使用,這其實就是RESTFul精神。

這樣 URI是play framework的主要概念。

對一個Java物件的呼叫,不是寫Java語句,而是使用URI就可以,如下:
GET /clients/{id} 實際是呼叫Clients物件的show方法。

3.Efficient templating engine
Play框架認為JSP & Expression Language模板機制很好,但是需要太多配置,吸收其模板設計,剔除配置。對於一個有無Email的顯示頁面,使用JSP大概需要以下很多語句實現:

<c:choose>
    <c:when test="${emails.unread != null && fn:size(emails.unread)}">
        You have ${fn:size(emails.unread)} unread email(s)!
    </c:when>
    <c:otherwise>
        You have no unread emails!
    </c:otherwise>
</c:choose>
<p class="indent">


而是要Play框架則可以如下:
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !

4.JPA on steroids
Play框架採取JPA作為持久化,並且使其更方便使用。

public void messages(int page) {
    User connectedUser = User.find("byEmail", connected());
    List<Message> messages = Message.find(
        "user = ? and read = false order by date desc",
        connectedUser
    ).from(page * 10).fetch(10);
    render(connectedUser, messages);
}
<p class="indent">

個人意見:這段程式碼倒是直接將持久層和表現層直接耦合在一起,沒看到Domain Model了。看來DDD需要普及到每個角落不容易啊。

5.Integrated Cache support, with easy use of the distributed memcached system if needed.
整合了快取支援,可以使用memcached作為分散式快取。

6.融入了OpenID 這樣單點登入SSO技術。

7.提出Application modularization,可以重用各種元件,包括CSS Javascript

個人點評:總體來說,Play框架是一個與Struts2 JSF Tapestry競爭的框架,但是又整合了持久層和伺服器,它的強項在其前半部,也就是展現層,作為一個打包整合的框架,沒有強大的Domain層,是非常令人失望的。


Play框架網站:

http://www.playframework.org/

[該貼被banq於2009-10-21 10:23修改過]

相關文章