@
fireflyc 在
晓风的这篇博文 的回复,引起了我的一些思考,考虑到内容较多,就单独写成一篇博客吧:
-------------------下面是正文的分隔线-----------------------------------
那么我也聊一下
Nutz 这个框架的设计思想,或者叫做“精神”,或者随便怎么叫它。
我希望 Nutz 是你一个乖巧的奴仆
并且它不是你唯一的奴仆
Nutz 框架对使用者的态度
不是:
“要这样编程序!”
而是:
“我能为你做些什么?”
它存在的意义是想努力
帮大家处理一些编程工作中很烦琐的问题。
它对自己的最低要求就是:
“不招人讨厌”
它努力的在理解现在的程序员主人真正喜欢什么,又讨厌什么
比如 ORM:
为什么大家用 ORM 呢?因为大多数人都讨厌拼 SQL,很麻烦。但是有时候又不得不用一下 SQL。所以 ORM 对大多数程序员主人的最大的意义(虽然不是唯一的)就是:
省却了拼装 SQL 的烦恼
因此
Nutz.Dao 就替你拼 SQL。 实际上,它是 Hibernate 和 iBatis 的一个折中。
它可以支持你随便怎么写自己的 SQL,也可以根据一个对象,替你拼出 SQL
但是
它仅此而已。
至于分页,条件查询什么的,则是顺理成章的事。
比如 Ioc
Ioc 的意义就是
解耦
我发现有很多程序员其实不习惯 Ioc 方式。
有些经验的人,拥有自己的解耦方式。
当然更多的人喜欢 Ioc 的方式,他们使用 Spring 。
Spring 的 XML 配置语法过于繁琐,而新的基于Java注解的 Ioc 框架(比如 Guice),实际上就是把耦合写在另外的一堆 Java 文件里,并且部署后似乎很难修改。
所以
Nutz.Ioc 默认选用了 JSON,(又是一个折中:书写不麻烦,但是部署以后可以随时修改)
当然,它也支持你把耦合写成任何样子,如 XML,甚至数据库,扩展它一个接口就可以了。
关于这一点, 这里有详细的描述:
http://code.google.com/p/nutz/wiki/ioc_ioc_loader
比如 Mvc
至于Mvc,其实什么要放到 M 里边,什么要做成是 V,哪一个又需要写成 C,程序员主人们的理解都有或多或少的偏差。但是无论如何,他们最起码需要做的就是:
HTTP 与 Java 之间映射
Nutz.Mvc 力图做到刚刚够用,只负责粘合 M-V-C, 关于权限,日志,验证,UI 组件的支持统统没有。
同时也不限制你的扩展,比如模板引擎,比如要想支持 freemarker, 添加起支持来很自然。
它努力让配置,约定的形式最自然
比如
Nutz.Dao 中的各种注解, 比如
Nutz.Ioc 的 JSON 配置文件语法。
基本上,现在还没有人抱怨它们很难懂。-- 当然现在
Nutz 使用的人很少也是一个主要原因。
我们还在不断聆听来自各方的抱怨,我们对于批评,尤其是具体的批评,是很饥渴的。
说点形而上的东西
对于现有工具和框架进行改良我是支持的,但是“改良”是一种手段,不是我们追求的目的,不是吗?
Nutz 追求的是让它的程序员主人们最大限度的少写代码:
- 可以让程序员主人少写一行代码
- 可以让程序员主人少读一段文档
- 可以让程序员主人少理解一个概念
- 可以让程序员主人少知道一个约定
这些在我们看来,都是有很有意义的
所以
Nutz 的任何设计,都会考虑到是不是能利用程序员主人现有的知识。
它只假设你熟悉 JAVA,SQL 和 Tomcat。
因为我们的工作要能变得轻松一些,
当市场让老板让我们修改一些代码时,我们不用加班,加班很毁身体。
而且我们也知道如何修改,
因为我们的工具很简单,它让我很容易摆弄,我总能让它服服帖帖的干活,
虽然我们只会 JAVA,SQL 和 Tomcat 的配置
当然
Nutz 不能帮你做到这一点,它不是“银弹”,甚至它是不是“银色的”的都是个问题。
但是起码我希望它能
“在你构思你的项目时,不会是你的另外的一个问题”。
你不会说,我要维护 XXX 的配置文件,我要维护 XXX 的支持类,好累啊。
我不希望它成为程序员主人们的另一个负担,
程序员主人们对待这个框架不需要小心翼翼的,不需要学习很多约定和规则。
我希望使用它不会为你增加工作量,相反,在很多时候,我希望它会帮你降低一点点工作量。
能做到这点我就很满足了。
如果通过改良 SSH 能做到这一点,我当然很高兴,因为能省了不少事。
但是真的能吗?
能做的彻底吗?
SSH 是头几年的设计,在它们发布之初,的确蕴含着很多创新的思想。
但是现在呢?
我想,你已经不会脱口而出的说:“扯淡!SSH 无懈可击!”,其实,很多人都不会,大家只能说:“SSH 真是好强大哟~~~”
我希望一个工具或者框架能够做到:
至于它强大不强大,干我屁事。
所以,
Nutz 也不是大框架,它当然不是,它很小。我很同意你 “
不走大框架的路” 和 “
提高工作效率” 的观点。
但是关于 “
a,一个开发框架,注重实用”
什么样的开发框架呢?
什么叫“实用”呢?
我想你给出的答案是: “
一组基于 SSH 的编码约定”
而
springside 的答案似乎是: “
一组代码例子”
这里的问题在于,你只能完善 SSH,而不能让它有本质上的提升。 Spring 团队可能不会为你做太多修改。
Spring 团队总是有很多伟大的思路
因此,他们很可能干脆不理你。
那么,这会不会限制你呢?
这会不会导致:如果你有更好的主意,可以提高程序员的生产力,有些时候不得不“曲线救国”。
不过我想,
努力做出些东西,让程序员的效率变高,应该是你和我的一个共识
实际上它也是大多数程序员的共识。
而我,希望
Nutz 能成为你所说的 “
a,一个开发框架,注重实用”
分享到:
相关推荐
对于 Java 程序员来说,除 SSH 之外,可能还有另外一个选择: Nutz 当然,它是开源的,并且是完全免费的。 同传统的 SSH 相比,它具备如下特点: 轻 -- 当前最新版,整个 jar 文件共 820k 薄 -- 针对 JDBC 的薄封装...
在力所能及的情况下,嵌入的提高Java开发人员的能力。 谈话很便宜。 给我看看代码! Nutz遵循Apache协议,完全开放,文档齐全,永远免费(商用也是) 完整的Mvc,Ioc,Dao,Aop,快速开发Web /桌面/嵌入式应用,无...
为最大限度的提高 Web 程序员的生产力,Nutz 必须具备如下特性: 提供 SSH 大部分功能 数据库访问层 -- Nutz.Dao 反转注入支持 -- Nutz.Ioc Mvc 框架 -- Nutz.Mvc Json 解析器 -- Nutz.Json 更多的简化Java语法的...
坚果键NUTZ一键脚手架概述github地址git @ osc地址演示地址仓库代码内已设置存储库目标提供开箱即用的企业级开发平台提供企业开发中常见的组件和交互示例提供高度互补的业务基类提供各种超高体验的前端交互组件......
提高生产力是这个框架唯一的目标。 就像 Java 设计之初,考虑最多的是程序员的易用性和运行时效率的权衡, Nutz 也是这样。希望通过 Nutz, Java 的开发人员可以获得更快的开发速度,更少的代码量,并且这些以不损害...
对于 Java 程序员来说,除 SSH 之外,的另一个选择: Nutz 当然,它是开源的,并且是完全免费的,同时也是商业友好的(Licensed under the Apache License, Version 2.0)。 最新的源码托管地址已经转移到 Github 上 ...
Nutz是对于Java程序员来说,除SSH之外的另一个选择。当然,它是开源的,并且是完全免费的。同时也是商业友好的(Licensed under the Apache License, Version 2.0)。
Nutz, 它是一组轻便小型的框架的集合。...如果你觉得 Java 语法不如 Ruby 便捷, Nutz.Castor 以及 Nutz.Lang 专为你设计 如果你以前根本没接触过 SSH ,只使用 JDBC 编程, 整个 Nutz 专门为你设计
nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册
需求描述 记录客户信息(包括级别信息,多个联系人信息) 记录公司联系客户的反馈信息 ...Java:Nutz框架 缓存:EhCache, 静态模板框架:Beetl 后台UI框架:B-JUI 数据库:MySql 后台服务器:阿里云centos6
Nutz高效开发框架是国内比较独立强大的技术团队开发的轻量级的框架快捷实用工具,由于可以方便地在各种数据库中调用存储数据,所以可以称之为方便程序员通行的项目大厦的手脚架工具。对于从事数据库相关的程序员来说...
用于nutz邮箱验证jar包
nutz生成javabean工具.zip
可连接多种数据库根据表直接生成nutz所需的bean
nutz框架使用手册,从零到有深入学习nutz平台开发
Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等整 -- 它所有功能均不依赖第三方 jar 文件。这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它...
可以快速定位路径 页面 本jar包是nutz实用插件 希望大家多多下载
nutz框架jar包
nutz框架开发手册,框架很方便使用的,和大家分享
在做nutz redis集成的实时,由于依赖包的问题被坑了一把,为了后人不要走同样的路,把所有依赖包放在上面了。