`
vv_1024
  • 浏览: 110186 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

给springside一剂强心剂,重新点燃SSH架构的热情 2

    博客分类:
  • J2EE
阅读更多
接上一篇<a href="http://lovephoenix.iteye.com/admin/blogs/591383">给springside一剂强心剂,重新点燃SSH架构的热情 1</a>

下面讲讲使用的方法。

使用这套系统,我们首先把所有的注意力都集中在领域模型的建立上面,这里对POJO对象进行了扩展,这得益于 java 的 annotation,代码生成器提供了许多用于构建特定业务的注解,只要在pojo对象上打上 annotation 注解,代码生成器就会结合模板构建 annotation,对于持久化的 JPA 注解,代码生成器目前已经支持解析"单向双向关系的一对多,多对一及自身一对多",其中还包括 @MappedSuperclass @Transient 等注解。

代码生成器提供的注解有
@EHtmlTag
@HtmlTag
@JspPageName
@LazyGenerator
@ManyToManyValueByJsp
@ManyToOneValueByJsp
.......

比如 建立一个附件抽象类 Accessory


注意其中的 @HtmlTag(value=EHtmlTag.file) 注解
只要在字段上打上此注解,在生成的jsp页面中 就不会<input type="text">方式出现,而是作为一个上传附件组建的整体出现,这些属性都会在后台获取信息,并持久化到数据库中。

而上面的附件抽象类 Accessory 作为上传组建的标准,用户可以直接使用,如果系统中需要有作为附件上传的地方,用户只要新建一个类继承这个抽象组建即可,非常方便。

再看看长文本字段text的使用

只要打上 @HtmlTag(value=EHtmlTag.textarea) 标签 在生成的jsp页面中就会出现多行文本框。


有人说在pojo类中加入了太多的注解,代码可读性就会下降很多,也影响代码重用。
所以我在转换机制中加入了xml文件。把领域模型转换为xml文件,很多扩展属性都可以在xml文件中设置,

生成的xml文件格式如下:



然后代码生成器读取xml文件,再根据自己编写的模板结构自动合成,生成源代码。

在这种机制下完全可以通过修改配置文件,和模板文件,来生成不同架构的java程序,甚至可以运用到其他编程语言的领域,其实最复杂的就是前台界面,前台界面直接影响用户体验,这里不是代码生成器能解决的地方了,在rails中,最终页面也需要开发人员的干预,代码生成器最大限度的做到在重复性代码中减少开发人员输入的代码量。

待续...
  • 大小: 26.6 KB
  • 大小: 5.3 KB
  • 大小: 21.3 KB
6
1
分享到:
评论
8 楼 faylai 2010-02-20  
支持一下
7 楼 vv_1024 2010-02-19  
amonlei 写道
model给污染了


可以用xml文件配置,所以提供了两套方案,xml和领域模型可以相互转换
6 楼 amonlei 2010-02-11  
model给污染了
5 楼 vv_1024 2010-02-10  
这个代码生成器只是工具,不是框架,文章中代码演示生成的springside框架源码,是提供了springside相匹配的模板。领域模型凌驾于编程语言之上,模板可以任意修改,不局限于J2EE,完全可以生成其它编程语言的项目骨架。
4 楼 xtlincong 2010-02-10  
做这个轮子之前先看openxava
3 楼 vv_1024 2010-02-10  
我也考虑到这个问题,所以在转换的时候是 领域模型 -> xml配置文件 -> 修改xml配置文件 -> 解析xml 生成项目源码。领域模型中的 annotation 和 xml 属性是一一对应的,可以不使用annotation,而直接在 xml 中设置,两种方式都可选,当然项目生成以后,annotation 和 xml 都是可以删除的。

楼上的方法也很不错,多多交流,谢谢!
2 楼 fanfq 2010-02-10  
建模后直接反向工程。
1 楼 ynstudio 2010-02-09  
我们也做了一个类似的东东,不过我们不是写的annotation,而是直接使用的javadoc。类似如下,因为使用annotation的话,当你重构你的annotation时,麻烦就大了。
	/**
	 * 告警类别。
	 * @Editor --表示编辑页面如何做
	 * type="optionSelect"
	 * groupId="alarmType"
	 * @SearchItem --表示本字段用作查询条件
	 * displayType="optionSelect"
	 * groupId="alarmType"
	 * @return
	 */
	public String getAlarmType() {
		return alarmType;
	}

我们做成了一个eclipse插件,执行后,CRUD的代码,包括配置文件都生成了,编译后,CRUD的界面可以直接操作。可以省去不少机械劳动,但没有做的很复杂。

相关推荐

Global site tag (gtag.js) - Google Analytics