泥巴麒麟的BLOG

shenAwesome@hotmail.com 纵不能,将醉做生涯,休拘束

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  195 Posts :: 2 Stories :: 80 Comments :: 0 Trackbacks
      以前曾考虑过简化web框架,很大原因是struts的配置特麻烦,大致也做了个开始。然。。。自己清楚得很,自己毕竟不是大师,而且毕竟要挣钱糊口。客观上没那个条件能做出非常完美和具有通用性,并且能够被广泛接受的框架。至多能做出一个比较有特色的,在某个领域比较简单的东西,就好比机械化时代后的手工刀,只能自己欣赏把玩而已。
     相比之下,对于自动代码生成的思考,则无疑更有实用意义。在实际工作中,我们会发现做了很多重复的东西。经常粘贴代码就说明:代码出现了重复。我总相信:每段代码都是独一无二的,把代码写的这么重复累赘,代码就已经不再是艺术品,我们的工作也变得乏味无趣。
     解决这个问题,我有两个思路:若采用自己的简化框架,则可能灵活性不够,且也没法与市场,与工业化的软件环境接轨,就仿佛火器时代的剑客,这是死路。则,看看自动代码生成的构想:
    我们所做的应用,最简单也最常见的为针对实体对象的:create ,read ,update, delete,query(list).
    按目前我公司的struts标准框架,有:dao/bo/action(form)/jsp +资源文件和配置文件
    使用spring为配置工具,Velocity为模板引擎。
     截图有点麻烦,这里就懒一点。大致的思路,是完整地进行对pojo的描述,然后指定相关模板,最后组织为任务组,进行批量执行代码生成。附上spring配置,可以看出思路:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  
<bean id="commTask" class="com.shen.autocode.task.CommTask" abstract="true">
    
<property name="pojo" ref="pojoDesc" />
    
<property name="path" value="f:/test/" />
  
</bean>
  
<bean id="commModifer" class="com.shen.autocode.task.CommPathModifer" abstract="true" />
  
<bean id="taskSet" class="com.shen.autocode.task.TaskSet">
    
<property name="tasks">
      
<list>
        
<!-- dao/model -->
        
<bean parent="commTask">
          
<property name="name" value="dao" />
          
<property name="template" value="vm/auto/dao.vm" />
          
<property name="extend" value="#/dao/##DAO.java" />
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="dao" />
          
<property name="template" value="vm/auto/model.vm" />
          
<property name="extend" value="#/dao/##Model.java" /> 
        
</bean>
        
<!-- bo -->
        
<bean parent="commTask">
          
<property name="name" value="bo" />
          
<property name="template" value="vm/auto/bean.vm" />
          
<property name="extend" value="#/domain/##Bean.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="bo" />
          
<property name="template" value="vm/auto/bo.vm" />
          
<property name="extend" value="#/domain/##BO.java" /> 
        
</bean>
        
<!-- action c2 r1 u2 d1 q2 ,以及form,以及action的csv列表准备加权限 -->
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_c1.vm" />
          
<property name="extend" value="#/action/##CreateShowAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_c2.vm" />
          
<property name="extend" value="#/action/##CreateAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_r.vm" />
          
<property name="extend" value="#/action/##ViewAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_u1.vm" />
          
<property name="extend" value="#/action/##UpdateShowAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_u2.vm" />
          
<property name="extend" value="#/action/##UpdateAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_d.vm" />
          
<property name="extend" value="#/action/##DeleteAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_q1.vm" />
          
<property name="extend" value="#/action/##SearchAction.java" /> 
        
</bean>
        
<bean parent="commTask">
          
<property name="name" value="action" />
          
<property name="template" value="vm/auto/action_q2.vm" />
          
<property name="extend" value="#/action/##ListAction.java" /> 
        
</bean>  
        
<!-- jsp 以及资源文件-->

      
</list>
    
</property>
  
</bean>

</beans>


    以及定义pojo的配置示例

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  
<!-- 对于实体对象的定义 -->
  
<bean id = "pojo" class = "com.shen.autocode.entity.PojoDesc" abstract="true"/>
  
<bean id = "field" class = "com.shen.autocode.entity.FieldDesc" abstract="true"/>
  
  
<bean id="pojoDesc" parent="pojo">
    
<property name="task" value="/dao/bo/action/jsp/"/>
    
<property name="name" value="asset" />
    
<property name="chName" value="资产" />
    
<property name="dbName" value="T_ASSET" />
    
<property name="fields">
      
<list>
        
<bean parent="field">
          
<property name="name" value="id" />
          
<property name="chName" value="编号" />
          
<property name="dbName" value="ASSET_ID" />
          
<property name="type" value="1" />
          
<property name="length" value="0" />
        
</bean>
        
<bean  parent="field">
          
<property name="name" value="name" />
          
<property name="chName" value="名称" />
          
<property name="dbName" value="ASSET_Name" />
          
<property name="type" value="0" />
          
<property name="length" value="10" />
        
</bean>
      
</list>
    
</property>
  
</bean></beans>

如上,加上velocity模板,一个简单的自动生成代码的引擎就可以运作了
    

   
posted on 2006-03-13 14:20 泥巴麒麟 阅读(348) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问