Nutz1.a.15发布两个月以来,反响不错,更值得欣慰的是,提意见帮助Nutz的盆友很多很多,借此转载一篇新近由 fireflyc 发表的意见(据说zozoh在看到意见之后甚为欣慰,当即表示感谢热心人士的意见,欢迎大家更多地表达,尽情的抨击):
仔细阅读了一下源代码,单纯的几个技术观点:
1.数据库的封装。这里的封装我觉得太薄太脆弱。和hibernate比起来根本没有办法比,hibernate的HQL是一种语法分析的推导。而这里只有SQL,虽然简单但是意味着耦合。对sql的执行我看到SqlMaker这样写道
"INSERT INTO %s (%s,%s) VALUES(@%s,@%s)"
也就是说,所谓的封装是对字符串的一种封装。把SQL的各个部分进行拼装。这种做法我不觉得有什么地方好,反而不如直接写sql,不做任何封装的好。这里估计是想要模仿什么,同样的道理注解的加入也是想要模仿什么。或许模仿的那个不合适这里的设计哲学。作者的设计哲学应该是输入sql,输出对象(或map)。那么很显然,作者如果能忍痛割爱把那些违反这个哲学的“对某些东西的模仿”剔除掉,那么这个东西会更加简洁明确。(我只是推测作者的设计哲学,可能有偏差。呵呵。。莫气)
2.对controller的封装,我觉的也是想在模仿什么,头部的那些注解暗示着返回的状态和输入的url都是由配置决定的,或者说是写死在代码里面的(我的哲学是,注解=代码而非配置)。我不知道这些注解和直接写死在代码里面有什么区别。两者都需要重新比编译。我还没有找到数据绑定相关的内容,难道直接使用request?这个我喜欢,但是问题是应该有一些工具类给我方便把request绑定到对象上才行。否则如果属性多无聊的代码也就多了。
3.代码整体结构有点out了。试举两例:
在日志的org.nutz.log.file.FileWriterPool中,26行getWriter方法,作者把打开的Writer放到一个HashMap里面,然后在getWriter的时候为了保证线程安全有如下代码段
Writer w = writers.get(file.getAbsolutePath());
if (null == w)
synchronized (this) {
w = writers.get(file.getAbsolutePath());
if (null == w) {
try {
w = new BufferedWriter(new FileWriter(file, true));
writers.put(file.getAbsolutePath(), w);
} catch (IOException e) {
throw Lang.wrapThrow(e);
}
}
}
return w;
Writer w = writers.get(file.getAbsolutePath());
if (null == w)
synchronized (this) {
w = writers.get(file.getAbsolutePath());
if (null == w) {
try {
w = new BufferedWriter(new FileWriter(file, true));
writers.put(file.getAbsolutePath(), w);
} catch (IOException e) {
throw Lang.wrapThrow(e);
}
}
}
return w;
synchronized这个锁,太大了,java早已经在jdk5的时候重写了所有的并发相关的内容,引入了Lock类。
再看这里是否有必要自己来加锁?打开java.lang.concurrent包,引入眼帘的是ConcurrentHashMap类。应该猜到是干什么了的吧?
4.作者太偏执,作者的偏执体现在不引用任何除jdk以外的第三方包,也许是对混乱的jar愤怒到了极点。但是这种做法意味着你将与开源世界完全脱离,你重新制作一切,不利用社区的任何帮助。这是一种浪费,我觉得和开源哲学背离(个人观点中的开源哲学)
5.整个框架的封装说不上好用,有些东西明明是两样背离的东西却被试图封装在一起。与其破坏一个东西,不如去修改一个东西。我们的框架被我偷梁换柱替换几乎把struts1架空了,把hibernate限制的几乎只有HQL了,甚至把事务变成了手工的,把spring和guice都做了一层封装,但是我没有再去考虑自己重写这一切,因为我曾经这样尝试过,最后发现远不如修改来的直接和巧妙。至少它还是struts、hiberate、spring之类的。
分享到:
相关推荐
nutz-1.r.60.jar
1. `nutz-1.r.62.jar`:这是Nutz框架的核心库文件,包含了所有Nutz框架的类和方法,供开发者在项目中引用,以利用其丰富的功能。 2. `nutz-1.r.62-sources.jar`:提供了框架的源代码,开发者可以通过查看源码理解...
标题中的"nutz-1.r.61.r2.jar"是一个特定版本的Nutz框架的Java库文件。Nutz是一个开源的Java框架,它旨在简化Web开发,提供一系列实用工具和强大的支持,使得开发者能够更高效地进行业务逻辑处理。这个版本号"1.r.61...
"nutz-1.r.61-发布包"是Nutz框架的一个版本更新,具体为1.r.61版本。这个发布包包含了该版本的文档、源代码、编译后的类库以及相关的辅助文件,便于开发者下载、学习和使用。 1. **Nutz框架概述** Nutz 是一个轻量...
Nutz, 它是一组轻便小型的框架的集合。...如果你觉得 Java 语法不如 Ruby 便捷, Nutz.Castor 以及 Nutz.Lang 专为你设计 如果你以前根本没接触过 SSH ,只使用 JDBC 编程, 整个 Nutz 专门为你设计
"nutz-1.a.25_jdoc.zip" 是Nutz框架1.a.25版本的Java文档压缩包,其中包含了详细的API参考和使用指南,帮助开发者理解和使用这个框架。 首先,让我们深入了解Nutz的各个组件: 1. **Nutz MVC**:Nutz 提供了一个轻...
nutz-1.r.62.jar 的jar包 可以解决中文乱码,设置字符编码等等
"nutz-1.r.58"是一个特定版本的Nutz框架发布包,包含了该框架的各种组件和文档,便于开发者在项目中使用和学习。 在提供的文件列表中,我们有以下内容: 1. `nutz-1.r.58-javadoc.jar`:这是Nutz框架的API文档,...
nutz-1.b.43-jdk5.jar 资源包
nutz-1.b.43-jdk5.jar 资源包
Nutz框架可以在WEB-INF/lib下仅使用一个nutz.jar来运行一个Web应用,前提是开发者自行添加必要的jar包,如连接池和数据库驱动等。对于那些希望尝试新东西、愿意成为NutzCommitters的开发者,Nutz提供了相应的指南和...
Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等整 -- 它所有功能均不依赖第三方 jar 文件。这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它...
对于"nutz-1.r.57-jdk1.5.jar",这是针对JDK1.5编译后的Nutz库,它确保了在JDK1.5环境下可以正常运行。为了实现这个目标,开发者可能需要对源代码进行一系列的修改,以移除或替换JDK1.6及以上版本特有的API。这通常...
nutzboot1.65版jar包...............................................................................................希望对你有用
Nutz是对于Java程序员来说,除SSH之外的另一个选择。当然,它是开源的,并且是完全免费的。同时也是商业友好的(Licensed under the Apache License, Version 2.0)。
- 针对编写JSON时代码过多的问题,Nutz.Json简化了这一过程。 - 对于喜欢Ruby语法简洁的Java开发者,Nutz.Castor和Nutz.Lang提供了类似简洁的编程体验。 - 对于那些未接触过SSH框架,仅使用JDBC进行编程的用户,...
1. **模块化设计**:Nutz采用了模块化的思想,使得开发者可以根据项目需求选择合适的模块,降低了项目的复杂度,也便于维护和扩展。 2. **IoC(Inversion of Control)容器**:Nutz提供了强大的依赖注入机制,帮助...
在Nutz 1.b.38 版本中,视图是处理关联数据表操作的一种高效方式。Nutz 是一个轻量级的Java框架,它提供了丰富的功能来支持数据库操作,包括视图的使用。视图在数据库设计中扮演着重要角色,允许开发者以简化的方式...
SpringMVC+Nutz框架介绍.docxSpringMVC+Nutz框架介绍.docxSpringMVC+Nutz框架介绍.docxSpringMVC+Nutz框架介绍.docxSpringMVC+Nutz框架介绍.docxSpringMVC+Nutz框架介绍.docxSpringMVC+Nutz框架介绍.docxSpringMVC+...