Play framework橫空出世
顛覆臃腫的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大概需要以下很多語句實現:
而是要Play框架則可以如下:
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !
4.JPA on steroids
Play框架採取JPA作為持久化,並且使其更方便使用。
個人意見:這段程式碼倒是直接將持久層和表現層直接耦合在一起,沒看到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框架網站:
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框架網站:
[該貼被banq於2009-10-21 10:23修改過]
相關文章
- Play! Framework 系列(一):初探 play 框架Framework框架
- 百度MUX形象橫空出世UX
- sbt建立play framework(play!)scala web專案FrameworkWeb
- 橫掃鴻蒙彈窗亂象,SmartDialog出世鴻蒙
- Play! Framework 系列(二):play 的專案結構Framework
- Play! Framework 系列(三):依賴注入Framework依賴注入
- Play Framework OpenShift 常用命令Framework
- 【程式人生】寫部落格一週年紀——橫空出世
- Play! Framework 系列(四):DI 模式比較Framework模式
- 運營商暗戰WI-FI新技術橫空出世
- 這一平臺橫空出世,國產快速開發時代全面開啟
- 在學習play framework中碰到的問題Framework
- 橫空出世!IDEA畫圖神器來了,比Visio快10倍!Idea
- Play Framework 2.5 環境搭建與新建專案(一)Framework
- Play Framework 2.5 環境搭建與新建專案(二)Framework
- 致Play Framework開發者們的一封信Framework
- Spring Boot 3.0橫空出世,快來看看是不是該升級了Spring Boot
- 亮瞎程式設計師雙眼的編輯器外掛橫空出世!程式設計師
- 麻雀要革命 第陸戰 告急!橫空出世的招貼事件 第四節事件
- 麻雀要革命 第陸戰 告急!橫空出世的招貼事件 第三節事件
- 麻雀要革命 第陸戰 告急!橫空出世的招貼事件 第二節事件
- 基於Linux的Palm OS 橫空出世 阻擊微軟為時已晚?(轉)Linux微軟
- 教程: Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & HerokuFrameworkORMJSONjQuery
- 在Scala IDE 2.0中設定使用 Play framework 2.0IDEFramework
- 2022顛峰之作SH神話橫空出世打造創新機制
- 神器 SpringDoc 橫空出世!最適合 SpringBoot 的API文件工具來了!Spring BootAPI
- AutoGPT 橫空出世,會成為 AI 領域中的下一大趨勢嗎?GPTAI
- 超級IP協議橫空出世,IPv6程式面臨徹底終止協議
- APEX關卡設計分析,它是如何做到橫空出世依舊保持熱度至今?
- 10:1,AlphaStar橫空出世,碾壓星際爭霸2人類職業玩家 TLO 和 MaNaAST星際爭霸2
- 新火種AI|Sora橫空出世!我們的現實世界會因此而覆滅嗎?AISora
- 橫空出世一週年,百度ERNIE再奪權威語義評測5項世界冠軍
- 橫空出世,席捲網際網路--評微軟等公司資料結構+演算法面試100題微軟資料結構演算法面試
- c#之.NET Framework 類庫_名稱空間C#Framework
- 「亞馬遜先生」的出世與入世亞馬遜
- 《阿凡達》導演卡梅隆加入 Stability AI 董事會;Molmo 橫空出世,開源多模態模型王座易位丨 RTE 開發者日報AI模型開發者日報
- 又一款記憶體資料庫橫空出世,比 Redis 更強,效能直接飆升一倍!殺瘋了記憶體資料庫Redis
- 公司網站橫幅素材,分享線上用橫幅模板,快速製作橫幅網站