ServiceFramework:效率堪比Rails的超敏捷Java開發框架
ServcieFramework是一個敏捷、快速、富領域模型的Java MVC 框架,其設計理念是讓用戶真正能夠用最簡單的方式解決80%的問題,這是框架應有的原則和價值。但目前很多Java框架為了追求框架本身的完美和擴展性而忽略了這些原則。
ServiceFramework 是為了快速開發而生的,其非常強調開發的高效性,其開發效率可以比肩Rails(不相信?可以體驗一下):
- 擁有Java界最簡單、非常高效且真正的富Model層
- Controller層含有便利的函數庫、簡潔高效的驗證器和過濾器
- 簡單但實用的View層,天然支持JSON、XMl格式輸出
因此,ServcieFramework 更加適合移動互聯網后端開發,這也是該框架的主要定位。
ServcieFramework的特性
目前大部分互聯網應用是以數據為中心的,尤其是關系型數據庫。所以如果能簡化數據操作,便能有效減少代碼。
所以我們參照Rails ActiveRecord 對模型類做了完善的充血實現。這其中絕對沒有因為Java是靜態語言導致的一些限制而做任何妥協。后面示例我們可以看到這一點。
核心優勢是,Model方面真正實現了Java的充血模型,Query使用了ActiveRecord的風格。相信我,沒有任何妥協。舉個例子:
從 Form 到 Model 再到 DB:
Order order = Order.create(params()); if(order.save()){ render(ok()) } else{ render(HTTP_403,"參數錯誤"); }
下面是一個很優秀的、被Play所推薦的ORM框架Ebean的Query Interface。調用方式如下:
Ebean.find(Order.class) .fetch("details") .setMaxRows(100) .where().eq("status",Order.Status.NEW) .order().desc("id") .findList();
說說幾點:
- 模型類還是被人操作來操作去,比如需要Ebean操作Order 模型。
- 鏈式關系比較詭異,有層級關系。比如 where()下有eq()等。
再看看ServiceFramework的query interface:
List<Order> orders = Order.where("status=:status",map("status",Order.Status.NEW)) .joins("details") .limit(100) .order("id desc") .fetch();
實際應用中通常會這樣使用:
@Entity class Order extends Model { public static JPQL status_new(){ return where("status=:status",map("status",Order.Status.NEW)); } } List<Order> orders = Order.status_new() .joins("details") .limit(100) .order("id desc") .fetch();
簡單直觀,非常自然地以SQL關鍵字區分,沒有任何學習成本,都是按程序員最直觀的方式進行。
其實不僅僅是Model層,controller層的設計也極盡簡化。我們也對過濾器(攔截器)做了重新實現,這不同于一般的(如Struts2)的實現。同時我們還提出了一個理念,在Controller層應該提供一個函數庫,就像PHP那樣。當然,我們現在只是提供一些比較實用的函數。但是以后會慢慢添加。
此外還有一些小特點,譬如:
- 一站式,不需要你整合各個框架;
- 隨時clone隨時使用,看十分鐘wiki便能著手開發;
- 你不用考慮項目結構;
- 你不用考慮如何分層;
- 你不需要考慮配置文件,我們提供一個統一的配置對象供你使用;
- 我們盡量使用一些最佳實踐來組織項目。比如使用IOC做基礎。這意味著,你大部分類都會自動被容器所管理。
使用后你會發現,該框架將Rails的靈活性帶到了Java平臺,歡迎Rails開發者回歸Java。^-^
轉自:http://www.iteye.com/news/25793