又一个轮子,我的小框架

我需要一个能架在JdonFramework上用的Restful框架,它必须足够的小巧精致,让我可以随心所欲的定制和改写,当前java世界里面的很多restful框架都不能满足我的要求,比如play,vraptor3以及国内的jrest4guice,它们都太大了,于是我开始制造我的轮子,一个深度集成jdonframework的小巧restful框架,开发过程中吸取了这篇文章http://www.ibm.com/developerworks/cn/java/j-lo-restmvc/的部分设计,感谢它。

web开发个人认为复杂部分在MVC的MV两端,也就是视图层和模型层,而control层没必要搞那么复杂,以避免新手将业务逻辑往control里面写,所以视图层我提供各种render,比如file,image,json,javascript,以及抽象出来的template,这个template可以让用户选择使用jsp,velocity, freeMarker等。model层的主流方法论是领域驱动设计,所以我深度集成jdonframework。代码示例如下:


@Resource
public class UserResource {

private @In HttpServletRequest request;//用@In注入http对象,request,session等

@Service(
"helloService")
private HelloService helloService;
//用@Service注入jdon管理的service



@Path(
"/")
public Renderer index() {
User user = helloService.getUser(
"999");
return new TemplateRenderer(
"/index.htm", "user", user);//借鉴sping mvc的跳转
}
}

框架还在完善当中,如果你有更好的设计,多多提意见,如果你想参与开发,那更是欢迎,我们的目标是用这个框架来写jivejdon,目前我和xmuzu是主要的参与者。框架demo以后会包括qi4j,akka,nosql。
[该贴被oojdon于2010-04-05 14:26修改过]

不错,我可以参与吗?

一直在关注DDD和jdonframework
一直有参与开源的热情
5年开发经验
希望能参与到开发中...

严重支持。

oojdon当初设想是直接将Model通过REST暴露出来,将@Resource和@Model合在一起,不过看你们这个最新设计,好像有一个专门的@Resource类,这个专门的@Resource类的定位最好能搞清楚,是类似Controller,还是Service的客户端,还是一个场景对象?

我建议将@Resource和我们前面讨论的场景对象结合在一起,这样,能一步到位,在设计理念上超过其他同类Rest框架,才不枉为发明轮子走一遭。不知如何?

坚决关注!!

2010年04月06日 10:26 "banq"的内容
@Resource和我们前面讨论的场景对象结合在一起 ...

不过,资源好像是静态概念,而DCI架构中场景是动态概念,这两个还是有区别的,REST和DCI两个架构是从不同角度看同一个问题,它们都是为解决更好实现需求的目标,两者是有区别的。

在无法定位他们之间异同之前,从框架设计者角度来看,这两个分开还是有必要的。当然,也允许使用者将这两者重叠在一起,将@Resource当作一个Context场景发生地,从这点上看,@Resource和Web服务定位是一样。

多谢banq老师,目前框架还是传统control方式,关于DCI以及model与resouce的映射我们会仔细思考,避免弄巧成拙,因为这是一个还比较有挑战的思维方式。
[该贴被oojdon于2010-07-09 09:27修改过]

现在的浏览器post,delete,put,get全能支持吗,之前做了一个相关的项目,做前端的同事说,put,delete都不支持。

用重载的post
_method传递


private String getHttpMethod(WebRequest request){
String methodName = request.getRequest().getParameter(OVERLOAD_POST);
if (methodName == null) {
methodName = request.getRequest().getMethod();
methodName = methodName.toUpperCase();
} else if ("GET".equalsIgnoreCase(request.getRequest().getMethod())) {
throw new IllegalArgumentException(
"You can't use " + OVERLOAD_POST + " parameter on a GET request. Use POST instead.");
}
log.info(
"---->the http method is:"+methodName);
return methodName;
}

[该贴被oojdon于2010-04-07 15:06修改过]

呵呵,这几天太忙了。oojdon兄,今天晚上有时间的话,QQ我们接着讨论一下。

还有关于banq老师说的场景对象。场景往往是有用户触发的,所以我觉得场景也可以在表现层生成,生成以后,业务层的模型对象,参与到当前的场景中来。当然这个场景对象,要不要显示的声明出来,这个还有待讨论。

Orz 求jdon的QQ群~

申请加入 可以吗oojdon
我的qq号码 181800779
我在上海

恭喜,我下载看了不错,其中有源码。

最新代码风格,表示性状态转移,这样写:


@Path("/")
public Represent index() {
List<User> userlist = helloService.getUserList();
return new Html(
"/index.ctl", "userlist", userlist);
}

还可以new Json,new Xml,再过不久支持Atom

HTML模板引擎集成了velocity,freemarker,commontemplate,默认在jdonmvc.properties找用户的模板选择,找不到就使用jsp.
[该贴被oojdon于2010-04-13 15:14修改过]