网名 WilliamZhu,微博@PrinceCharmingJ。Java程序员,4年开发经验,2010年懵懂来京。有过短暂几天Rails程序员生涯,颇为自豪。曾经为了创建一个音乐新模式的尝试而奋斗过,至今仍念念不忘。现专注于搜索和数据挖掘领域。平常的爱好就是向大牛们提问、聆听、学习。
建立一张表:
--标签表 CREATE TABLE `tag` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `tag_synonym_id` int(11) DEFAULT NULL, `weight` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --标签组。一个标签可以属于多个标签组。一个标签组包含多个标签 CREATE TABLE `tag_group` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
定义两个类:
public class Tag extends Model { @Validate private final static Map $name = map( presence, map("message", "{}字段不能为空"), uniqueness, map("message", "{}字段不能重复") ); @ManyToMany private List<TagGroup> tag_groups = list(); } public class TagGroup extends Model { @ManyToMany private List<Tag> tags = list(); }
Ok了,模型类建立完毕。 写一个controller:
public class TagController extends ApplicationController { @BeforeFilter private final static Map $check_params = map(only, list("save")); @At(path = "/blog", types = POST) public void save() { if(!Tag.save(params())){ render(HTTP_400,tag.validateResults); } render(ok()); } private void check_params(){ if(isEmpty(param("tag")))render(HTTP_400,"您至少需要传递一个name字段"); } }
List<Order> orders = Order.where("status=:status",map("status",Order.Status.NEW)).joins("details").fetch();
我也可以直接用Rails(或者基于JVM的jRuby、Grails),为何还要使用这个框架?
如果你想用Java,并且想获得类似Rails的敏捷开发效率,那么用ServiceFrameowrk。
转换语言需要考虑很多问题。比如Rails是多进程模型,而Java项目通常是单进程多线程的。并且Ruby VM 和 JVM 在性能、健壮性、监控、GC等各个
方面还是有差距的。至于JRuby、Grails等基于JVM上的语言,和原生Java的整合并不如想象中的那么完美。
对于一般的互联网应用,如果你能够采用脚本语言,建议优先考虑Ruby(CRuby),接着Groovy,然后JRuby。
和其他框架(如Play)相比,ServcieFramework有什么优势或独特之处?
应该说ServiceFramework得到Play的很多启发。Play是一个优秀的Java MVC框架。Play优于ServiceFramework的地方自然很多。
个人觉得ServiceFramework不同于Play的地方:
ServcieFramework的学习成本?
通常情况下,你只要把ServiceFramework页面的README看完就行了。
接着 `git clone git://github.com/allwefantasy/ServiceFramework.git`,就可以添加controller、model,着手开发项目了。
基于什么开源协议?在项目中使用ServcieFramework应该注意哪些方面?
GPL 2.0开源协议。
ServiceFramework为了一个具体需求而诞生的,所以并不是适合所有的项目。只针对特定领域的需求。比如移动互联网后端服务的开发就很适合使用ServiceFramework。
建议留意README中的一些提示。我这里重点提示几点,在目前这个版本下:
该项目未来的发展计划?
未来会根据使用情况来进行功能修补增强。下一步计划,我可以预见到的是:
目前项目贡献者情况?其他开发者如何参与?
开源没多久。目前就我一个人维护。不过已经应用于公司内部的一个项目,所以大家不用担心使用性。当然如果真的要用,我建议先用在小项目中。
如果要参与的话,可以直接到 ServiceFramework Fork一份下来,然后请求 merge 就行。想重度参与的可以联系我 [email protected]