CSDN博客

img tijichen

关于一个通用代码生成器的思考(1)

发表于2004/10/19 14:44:00  627人阅读

用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来动态生成

阅读全文
0 0

相关文章推荐

img
取 消
img