|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2004-09-30
关于开发STRUTS+SPRING+Hibernate生成器的提议:
目标:根据库结构,或自定义的逻辑XML, 生成基础框架性代码. 如果大家都有兴趣,可以做成一个开源项目.代码公开! 如果没有人有兴趣,只好自已做了自已用! 谁有好的建议请回贴! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2004-10-08
dhj1 写道 根据库结构,或自定义的逻辑XML, 生成基础框架性代码.
why not generate sql&code from model? |
|
| 返回顶楼 | |
|
时间:2004-10-08
我业余时间做了一个 不是很完善 在 sf上有下载 bigbird
https://sourceforge.net/projects/bigbird/ 根据一个配置文件生成 struts 所有的配置文件、类 、 dao 、 service、po 等 |
|
| 返回顶楼 | |
|
时间:2004-10-08
我仍然认为,代码生成不是一件好事。如果这些代码已经重复到可以自动生成的程度,干吗不把它们写成同一份代码呢?
|
|
| 返回顶楼 | |
|
时间:2004-10-08
这个要具体问题具体分析 不能一概而论 欢迎大家假如我的小组去完善 他
|
|
| 返回顶楼 | |
|
时间:2004-10-08
呵呵,这是路线问题。如果对你做法本身就不同意,怎么能够加入你呢?
我也认为,通过自动生成代码简化劳动,来延长“该死的设计”的寿命,不是什么好事,有点“助纣为虐”的味道。 |
|
| 返回顶楼 | |
|
时间:2004-10-08
=========〉〉我仍然认为,代码生成不是一件好事。如果这些代码已经重复到可以自动生成的程度,干吗不把它们写成同一份代码呢?
写成同一份代码 ?要是事情有这么简单就好了 可惜现实世界不是嘴上说说而已 |
|
| 返回顶楼 | |
|
时间:2004-10-08
wkrain 写道 =========〉〉我仍然认为,代码生成不是一件好事。如果这些代码已经重复到可以自动生成的程度,干吗不把它们写成同一份代码呢?
写成同一份代码 ?要是事情有这么简单就好了 可惜现实世界不是嘴上说说而已 事情肯定不会是这么简单的,不然还要程序员来干什么呢?不过照我的经验来看,大多数时候,在Java 1.0和C++中需要代码生成的情况,在现在的Java和C#里面可以靠动态代理来做到。比如以前涉及到remoting的时候都要生成skeleton和stub(EJB就是这个做法,Visual Studio开发COM也是),但现在一般都会用动态代理(Hessian的做法)。而且这些“需要代码生成的情况”还是在有良好OOD的前提下、由于语言本身的局限造成的,很多时候代码生成甚至是像老庄说的,是“该死的设计”造成的。 你不妨把这个需要代码生成的情景介绍一下,咱们一起看看能不能有更好的设计。 |
|
| 返回顶楼 | |
|
时间:2004-10-08
gigix 写道 我仍然认为,代码生成不是一件好事。如果这些代码已经重复到可以自动生成的程度,干吗不把它们写成同一份代码呢?
我说的可能有点MDA,我们现在的工具可以做到从模型生成: 1)OR MAP文件 2)DB SQL(create table, drop table) 3)序列化类的readobject, writeobject等方法 4)属性的get,set方法 5)属性的约束检验(比如字符串字段在数据库中的长度约束)方法 实际上IDE也可以做到其中的一部分。这样的确减少了不少工作量,可以忘掉数据库,不过对建模设计的要求就很高,重构起来是有点恐怖的。 |
|
| 返回顶楼 | |
|
时间:2004-10-08
celine 写道 我说的可能有点MDA,我们现在的工具可以做到从模型生成: 1)OR MAP文件 2)DB SQL(create table, drop table) 3)序列化类的readobject, writeobject等方法 4)属性的get,set方法 5)属性的约束检验(比如字符串字段在数据库中的长度约束)方法 实际上IDE也可以做到其中的一部分。这样的确减少了不少工作量,可以忘掉数据库,不过对建模设计的要求就很高,重构起来是有点恐怖的。 1、2、3是O/R mapping工具的题中应有之义。当Java支持metadata annotation之后,像Hibernate 3、JDO 2之类的ORM都会提供“根据class定义和metadata生成数据库结构”的功能(即你说的功能2,而功能1是不再需要的)。功能3实际上是一个database gateway(我有没有记错这个模式名?),说白了就是Hibernate的Session和EJB 3的PersistenceManager。功能5同样可以在persistence object的metadata中做到。至于功能4,根据member field生成getter/setter,这就见仁见智了。 这里的关键是,如果你利用class metadata和generic template来处理各各不同、又彼此相似的情况,你得到的是一份(仅仅一份)代码。如果用代码生成的办法,你将不得不维护多份代码,至少是在deploy之前需要一个重新生成的步骤(就像我们现在用xDoclet生成Hibernate映射描述符那样)。一件事只应该说一次,不应该变着各种形式说N次,哪怕是自动的。 |
|
| 返回顶楼 | |









