基于playframework v1构建一个新的Java web应用框架

原创
2012/12/07 07:55
阅读数 1.3K

正在考虑基于playframework v1构建一个新的Java web应用框架

动机: 我非常喜欢 playframework v1 但对v2不太感冒

v1中哪些特性应该保留:

  • 字节码增强。 这个超酷的特性允许框架和插件作者在应用中插入需要的逻辑,比如AOP,而AOP也仅仅是其中之一而已。
  • 全栈框架。跟play一样,这个新框架应该能自己运行,而不是插入一个Servlet容器。当然也应该允许用户应用被包进Servlet。
  • 支持插件,虽然API应有所变化。
  • 为应用程序提供方便的工具库, 比如 IO, Codec, Images 等.
  • 内置简单的安全框架
  • 易用的DB 层,允许插入不同的实现,包括 JPA, EBean, Morphia 等.
  • 内置数据有效性检查
  • 方便易用的异步API。
  • Before, After, Final, Catch 等过滤器
  • 根据 request.format 自动匹配模板文件
  • 模板中支持JavaExtension
  • 最最重要的是 简洁易用!

哪些应该改变或者提高的:

  • 路由机制。优化路由性能,让框架在大型应用(100条路由以上)也能快速定位响应方法。优化的机制可能包括使用代码生成器生成为每条路由动态生成帮助类。
  • 响应方法启动机制. 提高性能,减少对 reflection, static methods 和 Exception的使用。但API应该保持play1的简洁易用。
  • 插件框架API。
  • 用Java和脚本替代play1发行包中的python部分
  • CRUD
  • 用Rythm替代Groovy作为缺省模板引擎
  • 用Ebean替代JPA作为缺省数据访问层
  • 增强对JSON的支持。
  • 用markdown替代textile作为文档语言

Proposed Controller API:

public class Orders extends Controller {  
  
  
  // \-\-\- Parameters used in action handling methods  
  @Bind(method = Bind.ByID)  
  protected Order order; // will bind to http request params with Order.findById(params.get("orderId"))  
    
  @Bind(method = Bind.ById)  
  protected User user;  
  // \-\- eof Parameters  
    
  // this use new return style API  
  @Required("orderId")  
  public Result show() {  
    return new Render(order);  
  }  
  
  
  // this use old style API  
  @Required("orderId")  
  public void saveUpdate() {  
    notFoundIfNull(user);  
    order.save();  
    render(order, user);  
  }  
    
  // this action method will be executed in a separate thread  
  [@Async](http://my.oschina.net/553709938)  
  public Result report() {  
    order.save();  
    List<Order> orders = ...  
    return new RenderPDF(orders);  
  }  
    
}  

Sample route file:

GET /orders/{orderId} Orders.show  
POST /orders/{orderId} Orders.saveUpdate  
GET /orderReport Orders.report
展开阅读全文
加载中
点击加入讨论🔥(5) 发布并加入讨论🔥
打赏
5 评论
4 收藏
0
分享
返回顶部
顶部