超敏捷Java开发框架ServiceFramework java mvcorm充血模型
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();
说说几点
- 模型类还是被人操作来操作去,比如需要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。^-^