用ANT可以很方便的对整个项目的编译以及一些管理,那么代码了? 特别是适合自身项目需求的代码生成器,用XDOCLET似乎很多时候距离项目现实远了些.让那些数据封装类,常用的操作类都统统抛弃手写吧,关于这些,我也做了一些尝试,但是感觉要做一个通用性更强的东西出来,还需要更多的时间,我的想法首先是一个类描述的XML文件,毕竟,类是一切的基础,能够生成类,不就表示能生成代码么,下面就是关于这个XML文件的初步描述,很多地方借鉴了ANT,当然,对这个XML文件究竟该如何定义可以最全,最直观,我还要再想上一阵子,特别是在src的定义上
<?xml version="1.0" encoding="gb2312"?>
<!--classfile class文件 每个文件可包含多个class定义 -->
<classfile filename="" outpath="" namespace="">
<!--定义src外部来源-->
<external name= />
<!--定义src从查询中来源-->
<query>
<consql>
<sql>
<map>
<mapfield fieldname= attributename=/>
</map>
</query>
<!--定义src源,将在后面做详细说明-->
<src from="external" type="">
</src>
<!--import 需要引用的包名,如果是多个包,可用";"号隔开-->
<import package=""/>
<!-- 定义类 name:类名 access:访问限制public private protected -->
<class name="" access="">
<!--定义变量 type:变量类型 defaultvalue:默认值 src:外来参数,需带"$"符号-->
<variable name="" type="" access="" defaultvalue="" src=""/>
<!--定义构造函数-->
<construct>
<!--构造函数的参数列表,需带"$"符号-->
<paramlist src="">
<!--参数定义 isref和isout都是BOOl型,两者不能同时为true-->
<param name="" type="" isref= isout=></param>
</paramlist>
<methodbody>
<!--书写固定方法-->
<texttual></texttual>
<!--动态方法,需指定src, loop为BOOL型-->
<dynamic src="" loop=>
</dynamic>
</methodbody>
</construct>
<!--定义方法-->
<mehod name="" access="" returntype="">
<paramlist src="">
<param name="" type="" isref="" isout=""></param>
</paramlist>
<methodbody>
<!--书写固定方法-->
<texttual></texttual>
<!--动态方法,需指定src,loop为BOOL型-->
<dynamic src="" loop=>
</dynamic>
</methodbody>
</method>
</class>
</classfile>
就好象一条生产线一样,这里就是一个代码生产工厂,上面的XML文件就是生产线的定义,将这个生产线交给工厂,工厂就可以像挤奶油一样,一点一点挤出你想要的代码,有了生产线,有了工厂,还缺什么??还缺原料,原来就是src的定义
src描述了工厂的原料来源,src有个“from“属性,他定义了该src的来源,上面例子中,from的值是"external",他表示这个SRC由外部指定,你还可以指定from于一个文件,from一个数据库查询,以及其他等等等等..当然,这些具体来源类型也需要在xml中定义,比如上面的"external" 和"query"定义,,比如一个数据表封装类来说,他的SRC就来自于数据库中对该表的一些描述信息,后面的variable以及一些method都可以根据这个src来动态生成
关于一个通用代码生成器的思考(1)
最新推荐文章于 2023-09-27 15:37:58 发布