又一个轮子,我的小框架

10-04-05 oojdon
我需要一个能架在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的跳转
    }
}
<p class="indent">

框架还在完善当中,如果你有更好的设计,多多提意见,如果你想参与开发,那更是欢迎,我们的目标是用这个框架来写jivejdon,目前我和xmuzu是主要的参与者。框架demo以后会包括qi4j,akka,nosql。

[该贴被oojdon于2010-04-05 14:26修改过]

5
zl82719
2010-04-05 14:59
不错,我可以参与吗?

jentrees
2010-04-06 09:22
一直在关注DDD和jdonframework
一直有参与开源的热情
5年开发经验
希望能参与到开发中...

banq
2010-04-06 10:26
严重支持。

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

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

xiaosanaiq
2010-04-06 11:33
坚决关注!!

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


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

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

oojdon
2010-04-06 13:08
多谢banq老师,目前框架还是传统control方式,关于DCI以及model与resouce的映射我们会仔细思考,避免弄巧成拙,因为这是一个还比较有挑战的思维方式。

[该贴被oojdon于2010-07-09 09:27修改过]

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

oojdon
2010-04-06 14:45
用重载的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;
}
<p class="indent">

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

xmuzyu
2010-04-08 11:44
呵呵,这几天太忙了。oojdon兄,今天晚上有时间的话,QQ我们接着讨论一下。

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

Antinomy
2010-04-09 09:26
Orz 求jdon的QQ群~

oojdon
2010-04-10 20:59
项目地址:

http://code.google.com/p/jdonmvc/

CRUD的demo:http://code.google.com/p/jdonmvc/downloads/list

框架代码完全通过了findbugs的检查,没有任何警告。

[该贴被oojdon于2010-04-11 19:44修改过]

yangtao309
2010-04-11 12:56
申请加入 可以吗oojdon
我的qq号码 181800779
我在上海

banq
2010-04-11 20:39
恭喜,我下载看了不错,其中有源码。

oojdon
2010-04-13 15:10
最新代码风格,表示性状态转移,这样写:

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

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

HTML模板引擎集成了velocity,freemarker,commontemplate,默认在jdonmvc.properties找用户的模板选择,找不到就使用jsp.

[该贴被oojdon于2010-04-13 15:14修改过]

猜你喜欢
2Go 1 2 下一页