日期:2014-05-20 浏览次数:20859 次
ServiceFramework 根据其名字就可以知道,是一个面向服务的一站式MVC框架。脱胎于内部的一个搜索项目,通常我们定位在移动应用后端.
?
ServiceFramework设计的理念
能否让用户能够用最简单的方式解决80%的问题才是框架真正应该追求的。Java 很多框架就是为了追求框架本身的完美和扩展性而忽略了上面的原则。
?
项目地址:?https://github.com/allwefantasy/ServiceFramework
?
ServiceFramework 是为了快速开发而生的。大部分互联网应用是以数据为中心的,尤其是关系型数据库。所以如果能简化数据操作,便能有效减少代码。
所以我们参照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();?
说说几点
再看看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那样。当然,我们现在只是提供一些比较实用的函数。但是以后会慢慢添加。
此外还有一些小特点,譬如
最后,欢迎Rails开发者回归Java。^-^