泥巴麒麟的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 泥巴麒麟 閱讀(354) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 桐庐县| 南乐县| 汉源县| 大英县| 宁津县| 舒兰市| 大悟县| 南溪县| 平乐县| 青神县| 临泉县| 泽普县| 罗甸县| 太仓市| 宜兰县| 汕尾市| 兰溪市| 吴堡县| 泰宁县| 乌鲁木齐县| 和田市| 鄂托克旗| 旬邑县| 多伦县| 鹤庆县| 报价| 宿松县| 沅江市| 通道| 无为县| 奉贤区| 马山县| 海南省| 泸州市| 志丹县| 大埔县| 湛江市| 景德镇市| 沾化县| 东宁县| 元氏县|