Java高效开发框架Nutz开发成员专访
程序员文章站
2022-03-03 18:33:24
...
Nutz是一个优秀的国产开源项目,它是一组轻便小型的框架的集合,各个部分可以被独立使用,据作者称,Nutz的使命就是“解决第三方类库在Web项目开发中的低效问题”,而Nutz也被称作是“除了SSH之外的另一个选择”。
Nutz最初由zozoh(张志昊)于2009年发起,随着项目的发展,越来越多的开发者参与贡献(提交代码、撰写文档、测试bug等),后来逐渐形成了一个1000人左右的社区(主要成员)。
Nutz项目官网:http://nutzam.com/
本期我们采访了Nutz开发者社区中的几位主要开发者,请他们来谈谈Nutz这一项目的具体情况。
zozoh(张志昊) Wendal(陈镇铖) 胖五(武佩文) JuqKai(朱凯) Ywjno(杨文佳)
Nutz最初由zozoh(张志昊)于2009年发起,随着项目的发展,越来越多的开发者参与贡献(提交代码、撰写文档、测试bug等),后来逐渐形成了一个1000人左右的社区(主要成员)。
Nutz项目官网:http://nutzam.com/
本期我们采访了Nutz开发者社区中的几位主要开发者,请他们来谈谈Nutz这一项目的具体情况。
zozoh(张志昊) Wendal(陈镇铖) 胖五(武佩文) JuqKai(朱凯) Ywjno(杨文佳)
Nutz 能做什么?设计目标是什么?
zozoh:Nutz是一组轻便小型的框架的集合,可以做MVC、数据库访问、JSON转换、IoC等。目标是比市面上其他的类库设计的好用那么一点点而已。具体来说,包含的组件有:
胖五:做Web开发比较方便,当然像Nutz的Dao、JSON等功能在其他地方也很适用的。
- Dao:针对JDBC的薄封装,事务模板,无缓存
- Ioc:JSON 风格的配置文件,声明时切片支持
- Mvc:注解风格的配置,内置多文件上传功能
- Json:解析和渲染
- Castors:Java 对象类型转换
- Lang:更简洁的 Java 函数以及更丰富的反射支持
- Aop:轻便快速的切面编程支持
- Plugin:轻便的插件机制
- Resource:资源扫描
胖五:做Web开发比较方便,当然像Nutz的Dao、JSON等功能在其他地方也很适用的。
Nutz项目发起的初衷、经过?
zozoh:当时做这个项目是因为业界对Java在Web开发中效率的质疑。其实,经过10多年的发展,Java已经相当成熟了,现在从事Web开发,大多是采用第三方的类库(框架),比如流行的SSH,所谓Java在Web开发中的低效,不妨说是由于采用第三方类库进行开发比较低效。
于是我就写了点代码,发到Google Code上去,然后发个了新闻(Nutz 框架 1.a.15 发布,全部用例通过 Oracle/Psql/MySql 测试),当时也没用很大的企图心做的,毕竟它就是个小类库而已。
Wendal:然后我就“上当受骗”了,被吸引进这个项目。
Ywjno:我是到了1.b.4x版的时候才参与进来的。
zozoh:Wendal是那时候唯一的一个只关注Nutz代码质量的用户,其他什么都不关注。那时候有些人给我建议,说怎么发展云云,然后我说你们说得对,然后就给了Wendal管理员权限,实际上现在Wendal应该是Nutz权限最高的一个,我也小心不能总潜水,怕他踢我 -_-!
JuqKai:我在某次看见了Nutz的新闻,觉得很新奇,就开始研究它的源码,在里面学到了很多东西,然后就开始按我的思路改一些地方,刚开始的时候老是被纠正,反正就是想法很好,代码很臭。
于是我就写了点代码,发到Google Code上去,然后发个了新闻(Nutz 框架 1.a.15 发布,全部用例通过 Oracle/Psql/MySql 测试),当时也没用很大的企图心做的,毕竟它就是个小类库而已。
Wendal:然后我就“上当受骗”了,被吸引进这个项目。
Ywjno:我是到了1.b.4x版的时候才参与进来的。
zozoh:Wendal是那时候唯一的一个只关注Nutz代码质量的用户,其他什么都不关注。那时候有些人给我建议,说怎么发展云云,然后我说你们说得对,然后就给了Wendal管理员权限,实际上现在Wendal应该是Nutz权限最高的一个,我也小心不能总潜水,怕他踢我 -_-!
JuqKai:我在某次看见了Nutz的新闻,觉得很新奇,就开始研究它的源码,在里面学到了很多东西,然后就开始按我的思路改一些地方,刚开始的时候老是被纠正,反正就是想法很好,代码很臭。
你们是如何设计Nutz的?遵循的原则是什么?
zozoh:我希望Nutz框架对使用者的态度不是“要这样编程序!”而是“我能为你做些什么?”。它存在的意义是在保证足够的效率的基础上,努力帮大家处理一些编程工作中很烦琐的问题,让编程者用最少的代码做最多的事情,同时控制功能不要膨胀。
我希望一个工具或者框架能够做到:替我做的,做到最好;不替我做的,别挡我的路。Nutz努力地在理解现在的程序员主人真正喜欢什么,又讨厌什么。比如:
Wendal:好玩、好用。
JuqKai:简单、方便、实用。
我希望一个工具或者框架能够做到:替我做的,做到最好;不替我做的,别挡我的路。Nutz努力地在理解现在的程序员主人真正喜欢什么,又讨厌什么。比如:
- ORM对于开发者最大意义是省却了拼装SQL的烦恼,因此 Nutz.Dao 就替你拼 SQL。 实际上,它是 Hibernate 和 iBatis 的一个折中。
- Ioc 的意义在于解耦,但Spring 的 XML 配置语法过于繁琐,而新的基于Java注解的 Ioc 框架(比如 Guice)实际上就是把耦合写在另外的一堆 Java 文件里,并且部署后似乎很难修改。所以 Nutz.Ioc 默认选用了 JSON(又是一个折中:书写不麻烦,部署以后可以随时修改)
- 至于MVC,程序员最起码需要做的就是HTTP 与 Java 之间的映射,Nutz.Mvc力图做到刚刚够用,只负责粘合M-V-C,关于权限、日志、验证、UI组件的支持统统没有。同时也不限制你的扩展。
- Nutz努力让配置,约定的形式最自然
Wendal:好玩、好用。
JuqKai:简单、方便、实用。
谈谈Nutz项目发起与第1个版本发布之间的过程?遇到了哪些问题?是如何解决的?
zozoh:我是在2008年12月开始写,2009年3月出了第一个版本。由于不是什么高精尖的技术,所以基本没遇到啥问题。
在编码测试发布方面,没什么特别的,主要是我们会强调,如果有一个Issue被报了,尽量先写一个测试用例把它重现,然后再修复。
因为Nutz编译的时候几乎没什么依赖,所以我们构建项目的时候没用Maven,但是Wendal还是在Maven库里提交了Nutz,以便依赖Nutz的项目比较方便集成编译。
在编码测试发布方面,没什么特别的,主要是我们会强调,如果有一个Issue被报了,尽量先写一个测试用例把它重现,然后再修复。
因为Nutz编译的时候几乎没什么依赖,所以我们构建项目的时候没用Maven,但是Wendal还是在Maven库里提交了Nutz,以便依赖Nutz的项目比较方便集成编译。
你们的工作是什么?讲一讲是如何与Nutz结缘的?
zozoh:程序员。我发的第一版,所有没有结缘的问题。
胖五:程序员。我是2011年左右才认识并参与Nutz的,而且更多的时候算是使用者。当时E-hunter同学推荐给我的,他说来看看,这里有个好用的框架。
Wendal:请叫我软件工程师。我是第15版被骗进来的,我“手贱”重写了Nutz的Aop,还报了一大堆issue,并自己修复了。
Ywjno:程序员。当时忘记找啥资料,然后就发现了当时还在Google Code 上托管的Nutz,然后就没然后了。
JuqKai:程序员。我是2009年开始关注Nutz,刚开始是看到MVC的代码很漂亮,然后看到JSON、EL模块不爽,重写了两次。我只负责写我喜欢的部分,其他的全是zozoh、Wendal在处理。
胖五:程序员。我是2011年左右才认识并参与Nutz的,而且更多的时候算是使用者。当时E-hunter同学推荐给我的,他说来看看,这里有个好用的框架。
Wendal:请叫我软件工程师。我是第15版被骗进来的,我“手贱”重写了Nutz的Aop,还报了一大堆issue,并自己修复了。
Ywjno:程序员。当时忘记找啥资料,然后就发现了当时还在Google Code 上托管的Nutz,然后就没然后了。
JuqKai:程序员。我是2009年开始关注Nutz,刚开始是看到MVC的代码很漂亮,然后看到JSON、EL模块不爽,重写了两次。我只负责写我喜欢的部分,其他的全是zozoh、Wendal在处理。
免不了拿Nuts和SSH相比,两者的区别是什么?Nuts有哪些优势?
zozoh:用起来更爽一点点。
胖五:Nutz是简单又方便,SSH有一坨要搞得来的东西。
Ywjno:Nutz总是能在不经意间见到各种闪光点,而且通过阅读源代码还能对编程等能力有很大的帮助。
胖五:Nutz是简单又方便,SSH有一坨要搞得来的东西。
Ywjno:Nutz总是能在不经意间见到各种闪光点,而且通过阅读源代码还能对编程等能力有很大的帮助。
Nuts的学习成本?
zozoh:个人认为,只要会Servlet编程的程序员,8小时内能上手Mvc部分,会JDBC的程序员 8 小时内能上手 Dao 部分。其他的部分没啥太多学习成本,看看文档就用就是了。
胖五:Wendal做了入门视频,看一遍,照着做一遍,一个小时包你入门。剩下的看文档就好了,通俗易懂且大部分都有代码例子,想学不会都难呀。
Wendal:一个小时入门,但Java菜鸟除外。
胖五:真心见过菜鸟,各种Java的基本使用都不会,真心劝那些同学们先学会走路再尝试跑起来。框架是用来提高生产力的,别连语言都不熟悉就上来就用。
Ywjno:跟着nutz-demo的readme来自己写一遍应该就能上手了,童叟无欺。当然要想更深入的使用的话,还是需要再仔细阅读文档的。
胖五:Wendal做了入门视频,看一遍,照着做一遍,一个小时包你入门。剩下的看文档就好了,通俗易懂且大部分都有代码例子,想学不会都难呀。
Wendal:一个小时入门,但Java菜鸟除外。
胖五:真心见过菜鸟,各种Java的基本使用都不会,真心劝那些同学们先学会走路再尝试跑起来。框架是用来提高生产力的,别连语言都不熟悉就上来就用。
Ywjno:跟着nutz-demo的readme来自己写一遍应该就能上手了,童叟无欺。当然要想更深入的使用的话,还是需要再仔细阅读文档的。
Nutz项目宣称“代码绝对不会膨胀”,这需要你们额外做哪些工作?
zozoh:对某些需求说不,同时把内部抽象的好一些,这样别人扩展会非常方便。
Wendal:我喜欢删代码。
JuqKai:我的乐趣就在于将绞在一起的逻辑理顺,顺了还会膨胀么?
Wendal:我喜欢删代码。
JuqKai:我的乐趣就在于将绞在一起的逻辑理顺,顺了还会膨胀么?
Nutz未来还会加入哪些特性、组件?
zozoh:核心JAR不会扩展,正在考虑是否要砍掉一些功能。但是会做一些扩展项目。
胖五:Nutz这个核心包已经没啥好加的了,该做的都做了,不该做的也不会再碰。以后会重点放在Nutz的扩展上。
胖五:Nutz这个核心包已经没啥好加的了,该做的都做了,不该做的也不会再碰。以后会重点放在Nutz的扩展上。
Nutz项目代码的质量比较高,这是如何做到的?目前有多少提交者?你们如何规范不同人不同风格的代码?
zozoh:因为都是老手写的嘛。手潮的不给提交权限就是了。现在核心包的代码比较稳定了,提交也不多。我个人比较鼓励大家有不同的风格,但是要采用同样的Eclipse的代码模板就是了。
胖五:用的人多,大家提的bug就比较多,加上Wendal跟zozoh比较勤快,解决迅速,自然质量就上去了。比如经常看到有人在群里咋呼“Wendal,给你提了个issue xxx”,不消一两分钟就边能看到Wendal回复“done”,神一般的效率。
Wendal:一天不敲代码就手痒,伤不起啦。
zozoh:其中将近 1年多,我代码写的很少,Wendal提交比较多,注意到这一点以后,我悲哀地发现现在好像没有啥好特别修改的了,于是弱弱地想,要不要出一个重构版,那样就有代码可写了。
Ywjno:其实是现在托管到了Github的原因,发个Pull Request过来然后成为提交者是很简单的事情。当然,这需要楼上这几位的Code Review通过了才行。其实还是很希望看到各位能多提供Pull Request的。
胖五:用的人多,大家提的bug就比较多,加上Wendal跟zozoh比较勤快,解决迅速,自然质量就上去了。比如经常看到有人在群里咋呼“Wendal,给你提了个issue xxx”,不消一两分钟就边能看到Wendal回复“done”,神一般的效率。
Wendal:一天不敲代码就手痒,伤不起啦。
zozoh:其中将近 1年多,我代码写的很少,Wendal提交比较多,注意到这一点以后,我悲哀地发现现在好像没有啥好特别修改的了,于是弱弱地想,要不要出一个重构版,那样就有代码可写了。
Ywjno:其实是现在托管到了Github的原因,发个Pull Request过来然后成为提交者是很简单的事情。当然,这需要楼上这几位的Code Review通过了才行。其实还是很希望看到各位能多提供Pull Request的。
Nutz文档也比较全面,写文档占据了整个项目的多长时间?
zozoh:陆陆续续写的,代码和文档各占一半时间吧。目前正在开发新版的文档写作工具zDoc,通过一个SVN服务器就可以实现多人协作,写出漂亮的文档,这种感觉会很美妙的。不喜欢zDoc的同学也可以用markdown来写。
胖五:很惭愧,几乎没怎么写过。
Wendal:都是他们干的,我打酱油的。
Ywjno:基本就是对文档进行fix typo的人掩面路过……
JuqKai:以前都是写一个模块,就把这个模块的文档补上。重点是如果不补,某些人会催,很烦的。
胖五:很惭愧,几乎没怎么写过。
Wendal:都是他们干的,我打酱油的。
Ywjno:基本就是对文档进行fix typo的人掩面路过……
JuqKai:以前都是写一个模块,就把这个模块的文档补上。重点是如果不补,某些人会催,很烦的。
目前Nutz社区的情况?
zozoh:Nutz目前已经形成了一个1000人左右的社区,有热心的朋友捐给我们几个QQ群,方便大家加入、问问题。由于考虑到QQ群的氛围,所以Wendal会定期踢掉一批长时间潜水的人。所以在QQ群里,不时的有人会冒出来说“冒泡防踢”,因此我们的QQ群还比较活跃,大家互相也比较亲热。
不过很多问问题的人,通常都会有人来回答你,而且很多问题不是局限于Nutz的,但是大多和Web 开发有关。
你可以通过这个视频( http://v.youku.com/v_show/id_XNDAzMDI0NDEy.html) 和这个幻灯片(http://nutzam.com/press/what_is_nutz/)来更多地了解Nutz社区情况。
不过很多问问题的人,通常都会有人来回答你,而且很多问题不是局限于Nutz的,但是大多和Web 开发有关。
你可以通过这个视频( http://v.youku.com/v_show/id_XNDAzMDI0NDEy.html) 和这个幻灯片(http://nutzam.com/press/what_is_nutz/)来更多地了解Nutz社区情况。
Nutz项目已经4年了,支持你们的动力是什么?在开源项目方面,有哪些心得和感悟?
胖五:动力无非就是想做一件好用的工具给大家,当然首先自己得用着觉得舒服,“吃自己的狗食”嘛,现在只要是Java相关开发,必导入nutz.jar。做开源项目,我感觉最难的是坚持更新与坚持投入。
zozoh:因为没有啥放弃的动力就继续搞咯。没啥心得,感悟到是有一点,所谓“天下熙熙,皆为利来;天下攘攘,皆为利往”,我倒要看看这个发誓不盈利的小开源项目是不是能在熙熙攘攘的“天下”保持一份自己的纯静。
Wendal:全中国都有自己写的代码,这难道不是件很爽的事情么?
Ywjno:在代码里面看到有pull request进去的代码,这就是我的动力。
JuqKai:能有一份纯静的东西让自己写,很安心。
zozoh:因为没有啥放弃的动力就继续搞咯。没啥心得,感悟到是有一点,所谓“天下熙熙,皆为利来;天下攘攘,皆为利往”,我倒要看看这个发誓不盈利的小开源项目是不是能在熙熙攘攘的“天下”保持一份自己的纯静。
Wendal:全中国都有自己写的代码,这难道不是件很爽的事情么?
Ywjno:在代码里面看到有pull request进去的代码,这就是我的动力。
JuqKai:能有一份纯静的东西让自己写,很安心。
Nutz项目未来的发展规划?
胖五:会有更多好用好玩的东西出来,语言不再仅限于Java,涉及的内容也不在仅限于后台,比如nutz-ui之类的
zozoh:说到这个,维持一个小的核心Jar容易,如果Java 8出来了,可能考虑重写部分功能。但是继续发展方面颇有点商业的味道,所以我们暂时保密,哈哈。
Ywjno:我听楼上几位的安排。
JuqKai:有事说一声就行了。
zozoh:说到这个,维持一个小的核心Jar容易,如果Java 8出来了,可能考虑重写部分功能。但是继续发展方面颇有点商业的味道,所以我们暂时保密,哈哈。
Ywjno:我听楼上几位的安排。
JuqKai:有事说一声就行了。
之前wendal提议创建Nutz基金会,现在的情况是什么样?
胖五:现在就有呀,之前每个月都给Nutz的一个支付宝账号捐钱的,说好等着用这笔钱搞点东东,好像最近几个月都忘了捐了……
zozoh:大半年没有捐了吧,呵呵。等哥们有了钱,捐死它!
Wendal:钱?哪里?哪里?
zozoh:大半年没有捐了吧,呵呵。等哥们有了钱,捐死它!
Wendal:钱?哪里?哪里?
推荐阅读
-
高效 Java Web 开发框架 JessMA v3.2.3 正式发布
-
高效 Java Web 开发框架 Portal-Basic v3.1.1 发布
-
高效 Java Web 开发框架 JessMA v3.3.1 正式发布
-
高效 Java Web 开发框架 JessMA v3.5.1 正式发布
-
高效 Java Web 开发框架 JessMA v3.4.1 发布
-
高效 Java Web 开发框架 JessMA v3.2.2 正式发布
-
高效 Java Web 开发框架 JessMA v3.4.1 发布
-
高效 Java Web 开发框架 JessMA v3.4.1 正式发布
-
高效 Java Web 开发框架 JessMA v3.4.1 正式发布
-
高效 Java Web 开发框架 JessMA v3.5.1 正式发布