張昊

          J-Hi(http://www.j-hi.net)

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            45 Posts :: 1 Stories :: 110 Comments :: 0 Trackbacks

          #

          http://developer.51cto.com/developer/51cto-salon-13/





          視頻點播
          《Java快速開發(fā)的分析與探索》[上](張昊)
          《Java快速開發(fā)的分析與探索》[下](張昊)
          《Java快速開發(fā)平臺使用》(肖金華)
          用戶交流與問答環(huán)節(jié)

          推薦閱讀


          51CTO電子雜志《開發(fā)月刊》

          51CTO開發(fā)頻道推出《開發(fā)月刊》電子雜志。主要內容涵蓋Java、.NET、WEB開發(fā)、數據庫和移動開發(fā)等等。從技術細節(jié)到項目管理,方方面面為開發(fā)者服務。



          往期回顧
           
          51CTO技術沙龍之IDC挑選運維經驗談
          51CTO技術沙龍之掌握網絡流量分析與系統(tǒng)監(jiān)控
          51CTO技術沙龍之企業(yè)服務器安全攻與防
          51CTO技術沙龍之Linux系統(tǒng)安全
          51CTO技術沙龍之解析中小企業(yè)網絡運維
          51CTO技術沙龍之Web開發(fā)前沿技術探索與實戰(zhàn)
          51CTO技術沙龍之大型網站PHP開發(fā)之道
          51CTO技術沙龍之 IT技術人,茫茫職業(yè)人生路
          51CTO技術沙龍之 如何快速定位黑客攻擊
          51CTO技術沙龍之 關于企業(yè)安全運維的那些事兒
          51CTO技術沙龍之 站在業(yè)務擴展的角度看Linux運維技術
          51CTO技術沙龍之 從菜鳥到CTO,你的目標需要管理
          51CTO技術沙龍之 兩小時成為反掛馬達人
          51CTO技術沙龍之 全方位解析虛擬化
          51CTO技術沙龍之 企業(yè)基礎網絡與核心服務搭建
          51CTO技術沙龍之 負載均衡2期

          沙龍導讀與PPT下載

          51CTO技術沙龍第十三期總結:Java快速開發(fā)之路
          在2011年9月3日下午51CTO舉辦的第13期51CTO技術沙龍中,有幸請到Java開源平臺——J-Hi的兩位創(chuàng)始人張昊老師和肖金華老師。二位講師分別從理論和實戰(zhàn)來為大家介紹J-Hi,打開Java快速開發(fā)之路。查看
          PPT下載:《Java快速開發(fā)的分析與探索》(張昊)
          詳細分析快速開發(fā)與傳統(tǒng)開發(fā)方式在開發(fā)形式上的差異,兩個模式所存在的風險及如何規(guī)避這些風險,并對開發(fā)效率、成本及開發(fā)規(guī)范做出對比。最后闡述為什么快速開發(fā)將是以后軟件開發(fā)的趨勢。 PPT下載 | 視頻下載
          《Java快速開發(fā)平臺使用》(肖金華)
          主要介紹怎樣架構你的互聯網應用才能顯得不是那么草根,基于弱關系理論的結構化數據存儲與程序設計高性能的數據緩沖層讓你的數據離CPU再近一些。如何定位應用的性能瓶頸以及系能優(yōu)化的思路。 視頻下載
           

          本期講師介紹

           
           
          J-Hi快速開發(fā)平臺團隊核心成員 張昊
          軟迅博技術發(fā)展有限公司首席架構師,開源J-Hi快速開發(fā)平臺團隊核心成員,平臺項目的主要發(fā)起者與組織者。
          軟迅博技術發(fā)展有限公司項目總監(jiān) 肖金華
          開源J-Hi快速開發(fā)平臺團隊核心成員,十一年軟件開發(fā)經驗,帶領完成過多個大型項目。熟悉保險及電力行業(yè),曾任某IT公司保險業(yè)務線架構師。
           
           

          相關Java專題


          51CTO開發(fā)頻道專訪J-Hi快速開發(fā)平臺團隊核心成員張昊先生,向大家講述J-Hi快速開發(fā)平臺從創(chuàng)意到研發(fā)再到產品的完整脈絡和技術領域以及對廣大愛好者的一些建議。


           

          2011年7月7日,甲骨文舉行了生活的全球性活動,以慶祝即將到來的Java 7推出。標準版Java SE 7是對Java社區(qū)和甲骨文對開發(fā)語言和技術持續(xù)承諾的一種肯定。

            

          沙龍現場照片


           
           
           
           
           
           
           
           
           
           
           



          posted @ 2011-09-16 23:48 張昊 閱讀(1203) | 評論 (2)編輯 收藏

          http://weibo.com/javahi
          posted @ 2011-09-09 16:26 張昊 閱讀(888) | 評論 (1)編輯 收藏


          描述:在DWZ版中lookup的處理機制與經典的完全不同,對于lookup有兩種展現形式,一種是通過點擊lookup圖標彈出對話框后帶回選中的值,另一種是通過在文本框中輸入相應信息從而實現聯機式的查找?guī)Щ匦Ч膶崿F目的來看,無非是讓lookup的實體的主鍵值帶回到hidden的一個元素中,而其它值只是作為顯示參考之用,與底層的數據庫結構與數據庫表無關。一個完整的lookup由如下html元素構成:1)一個hidden用于保存帶回實體主鍵的ID值;如果要實現缺省的lookup過濾或排序可以相應的pageInfohidden元素,具體實現方式的用例參見《HowTo手冊》;2ntext用于顯示帶回的多個數據帶回項(注意:因為帶回的數據項與數據訪問層也就是數據庫表無關,因此每個textname都有一個hi_作為前綴);3)一個lookup有且只有一個主帶回項,只有主帶回項的文本框是可編輯的并且只有主帶回項會有lookup圖標也就是html的中的a元素。

          擴展屬性名

          lookupGroup

          lookup組可以理解為當前實體的名字,如果當前lookup組件是主實體中,則lookupGroup就是實體名,如果當前lookup組件在從實體(也就是明細表的lookup)中,則lookupGroup就是明細的集合屬性名

          lookupName

          lookup名可以理解為當前lookup實體的屬性名。從整體的DWZ框架來分析,實際上所有的tab都在一個IE窗口,也就是說JS文件在打開瀏覽器只會加載一次。這就產生了必須要保證每一個html元素的唯一性,即使是在不同的tab下也是如此。對于lookup來說,是通過lookupGroup+lookupName來確定元素的唯一性的。

          suggestClass

          主帶回項才會有該屬性,實現聯想查找?guī)Щ?/span>

          lookup實體的POJO類的全限定名

          searchFields

          查詢過濾的屬性名列表,以逗號分隔。例如帶回HiUser,該屬性的值為”fullName,userNum”,在文本框中001則平臺會查詢姓名或者是編號為001的所有用戶

          callback

          回調方法名,在查找?guī)Щ刂岛笙到y(tǒng)會回調該屬性的值的方法,以實現您對帶回后的特殊處理。例如callback=fun,那么在帶回值后系統(tǒng)會自動調用fun方法,并會自動傳入兩個參數fun(json,index),其中json:是帶回的完整json對象,index:是索引值,主要用于明細的帶回時要提供是第幾條明細記錄

           

          場景描述:一個會員編輯頁面要指定該會員所在的省份、城市、地區(qū),要求在選擇省份后會自動過濾該省份的城市,地區(qū)以此類推。

                 以下所有步驟只是修改OrganizationEdit.jsp文件,即可

          步驟一、為省份的主帶回項加callback回調方法,并在實現該js方法

          <input type="text" class="textInput" name="organization.hi_province.name" value="${organization.province.name}" callback="processProvince"

              function processProvince(json){

                 document.getElementById("pageInfo.province.f_id").value = json.id;

              } //該方法的目的是在選擇某個省份后將該省份的ID值放到指定的hidden元素中

          步驟二、為城市加一個用于過濾的hidden元素,注意processProvince()方法中的賦值語句就是該hidden元素;用于過濾的name必須與PageInfo的具體類相對應;必須要指定lookupGrouplookupName

          <input type="hidden" lookupGroup="organization" lookupName="city" name="pageInfo.province.f_id" id="pageInfo.province.f_id" value=""/>

              步驟三、為城市的主帶回項加callback回調方法,并在實現該js方法

          <input type="text" class="textInput" name="organization.hi_city.name" value="${organization.city.name}callback="processCity"

              function processCity(json){

                 document.getElementById("pageInfo.city.f_id").value = json.id;

          }

          步驟四、為地區(qū)加一個用于過濾的hidden元素

          <input type="hidden" name="pageInfo.city.f_id" id="pageInfo.city.f_id" lookupGroup="organization" lookupName="region" value=""/>

          總結:級聯下拉實際上是lookup的一個變種形式,主要的思想是為你要級聯的下拉的lookup加入過濾項,例如在城市加一個省份的過濾項,在選擇省份時后,會通過回調方法將這個過濾項的值存到該過濾項中。這樣逐級過濾就實現了級聯下拉的效果.

          posted @ 2011-06-03 17:53 張昊 閱讀(2280) | 評論 (5)編輯 收藏

                 大家可以簡單將J-Hi建模工具理解為數據庫的E-R圖,每個實體就對應一個數據庫的表,而實體中每個屬性就對應數據庫表的一個字段。那么實體與實體之間的關系或表與表的關系又是如何描述的呢?

                 對于數據庫表的關系大體可分為,如下幾種形式

                 many-to-one:相當于一個數據庫表的字段(外鍵)對應另一張數據庫表的主鍵,對于J-Hi來說,就是一個lookup(查找?guī)Щ兀<匆粋€實體中的某個屬性是lookup類型,這個屬性會lookup另一個實體。對lookup定義的操作步驟請參見“應用開發(fā)視頻”。頁面中的展示形式,例如你有一個報銷單,要lookup用戶,那么平臺就會自動將用戶的名稱帶回來,并在數據庫中將用戶的ID值保存到報銷單表的相應字段中。

           

                 one-to-many:相當于一個數據庫表下面會有一個或多個明細表,例如一個報銷單是主表而報銷單明細是明細表。在數據庫端的實現形式為,在明細表中有一個主表的外鍵ID字段。在J-Hi中我們稱之為引用,具體操作見聯機幫助

           

                 one-to-one:所謂一對一的關系在數據庫上的理解為,B表每加一條記錄A表也會隨著增加一條記錄,在J-Hi中的表現形式為實體繼承

                 對于實體的繼承,不只是簡單的表one-to-one關系,實體的繼承還包括所有的java類的繼承關系,JSP頁面的整合等等

                

                 many-to-many:多對多是一種復雜的表關系,J-Hi是通過中間過渡表來實現這種多對多的關系,例如一個項目可以有多個成員,而一個成員又有可能在多個項目中,建模的圖為

          posted @ 2011-05-31 10:34 張昊 閱讀(1114) | 評論 (0)編輯 收藏

          1.前臺頁面:

          //自定義一個回調函數ajaxDone

          <form action="expert_BaseInformationSave.action?navTabId=expert_BaseInformationList&callbackType=closeCurrent&ajax=1"

          method="post" class="pageForm required-validate" onsubmit="return validateCallback(this, ajaxDone)">

           

          //回調函數

          <script type="text/javascript">

                 function ajaxDone(json)

                 {

                        alert(json.expert.name);

                 }

          </script>

           

          2.后臺代碼:

          public class Expert_BaseInformationSaveAction extends BaseAction implements SynchronizationData{

                 private Expert_BaseInformation expert_BaseInformation;

                 private JSONObject json;

           

                 public String execute() throws Exception {

                        Expert_BaseInformationManager expert_BaseInformationMgr = (Expert_BaseInformationManager)

          SpringContextHolder.getBean(Expert_BaseInformation.class);

                        if(super.perExecute(expert_BaseInformation)!= null) return returnCommand();

                        expert_BaseInformationMgr.saveExpert_BaseInformation(expert_BaseInformation);

                        super.postExecute(expert_BaseInformation);

                        json = new JSONObject("expert", expert_BaseInformation, "name, gender, unit");

                       

                        return "json";

                 }

                

                 public Expert_BaseInformation getExpert_BaseInformation() {

                        return expert_BaseInformation;

                 }

           

                 public void setExpert_BaseInformation(Expert_BaseInformation expert_BaseInformation) {

                        this.expert_BaseInformation = expert_BaseInformation;

                 }

           

                 public JSONObject getJson() {

                        return json;

                 }     

          }

           

          注意:action中必須定義public JSONObject getJson() {

                        return json;

                 } 否則前臺無法獲取json數據。



                                               注:該文檔由J-Hi愛好者"笨笨"提供,他的QQ號為289542213,歡迎大家與他在技術上多多交流


          posted @ 2011-05-29 22:21 張昊 閱讀(888) | 評論 (0)編輯 收藏

          本文主要講解J-hi中樹的過濾。以員工部門樹為例。

          要求在點擊某個員工時,能夠查看到該員工所在的部門。

           

           

                     1-部門樹

          下圖2是所有員工列表:

          -2

          當點擊王五時,顯示王五所在的部門結構樹如圖3

                -3

          主要代碼部分:

          Jsp超鏈接代碼:

          <a

          href="tree.action?menuName=orgList&orgId=${item.org.id}" target="dialog">${item.org.orgName}</a>

          注意:orgId是動態(tài)傳入的參數,這里指該員工所在的部門編號。

          2、在himenu-config.xml中配置部門樹的后面加上這么一段

          <void property="filter">

             <string>org.cis.filter.orgCollectionProcessor</string>

           </void>

          注意:string標簽內的是寫過濾數據的類。對樹的數據進行過濾,提供兩種接口方式對數據進行過濾 MenuFilterProcessor 在獲取數據之前填加過濾器;MenuCollectionProcessor 在獲取數據之后再對數據做整理.具體方法查看java-docAPI

          而例子的orgCollectionProcessor類代碼:

          public class orgCollectionProcessor implements MenuCollectionProcessor {

           

              public Collection getCollection(Collection coll, Map<String, String> map) {

                 // TODO Auto-generated method stub

                 //coll - 當前節(jié)點下一級節(jié)點的數據集合

                  //map 動態(tài)的傳入數據,map的形式

                 //傳入一個員工的所在的部門Id,返回該員工所在的部門結構樹

                 int orgId=Integer.parseInt(map.get("orgId").toString());

                 for (Iterator iterator = coll.iterator(); iterator.hasNext();) {

                     Object obj = (Object) iterator.next();       

                     if(obj instanceof HiOrg){

                        HiOrg hiorg = (HiOrg)obj;             

                        if(hiorg.getId()!=orgId) {

                            iterator.remove();

                            coll.remove(obj);

                        }

                     }

                 }

                 return coll;

              }  

          }


                                               注:該文檔由J-Hi愛好者"無可"提供,他的QQ號為924372739,歡迎大家與他在技術上多多交流


          posted @ 2011-05-19 22:04 張昊 閱讀(856) | 評論 (0)編輯 收藏

          樹形菜單能很好的呈現菜單項之前的從屬關系,結構清晰明了。J-hi平臺提供了自定義樹形菜單的功能,通過簡單的配置即可實現。

          本文主要介紹通過樹形菜單選擇帶回節(jié)點值的實現方法。以選擇帶回行政區(qū)劃位置為例。

          數據庫表設計:

          默認帶回頁選擇界面:

          通過jhi自動生成代碼的功能,對于lookup xzqhwz的字段默認是如上帶回頁面,顯然并不能表現行政區(qū)劃位置之間的主從關系。

          樹形帶回頁面:

          而如果實現如下頁面的展示,將會清晰方便許多。

          雙擊即可帶回節(jié)點,也可通過配置帶回節(jié)點的各級父節(jié)點。

          下面是配置的方法:

          配置方法:

          修改xml

          修改C:"Program"hi-studio"eclipse"workspace"earch5"web"WEB-INF"config"himenu-config.xml

          在代碼末尾:

          </object>

          </java>

          之前插入:(注意修改其中參數)

           <void method="put">

             <string>zdtree</string>

             <object class="org.hi.base.menu.strutsmenu.WebDynamicMenuDefine">

              <void property="keymap">

               <object class="java.util.HashMap">

                <void method="put">

                 <string>id</string>

                 <string>parentxzqhwz</string>

                </void>

               </object>

              </void>

              <void property="parent">

               <string>id</string>

              </void>

              <void property="child">

               <string>parentxzqhwz</string>

              </void>

              <void property="childValue">

               <int>0</int>

          <!

          新版本jhi應為:<string>0</string>

          > 

              </void>

              <void property="menuName">

               <string>zdtree</string>

              </void>

              <void property="beanName">

               <string>org.hi.zdtree.model.Xzqhwz</string>

              </void>

              <void property="submenuName">

               <string>zdtree</string>

              </void>

              <void property="title">

               <string>行政區(qū)劃位置</string>

              </void>

              <void property="titleField">

               <string>xzqhwz</string>

              </void>

              <void property="needShow">

               <boolean>true</boolean>

              </void>

              <void property="javascript">

               <string>

              function backAgent(id,orgName){

          if(opener.document.getElementById('yzjbxx.xzqhwz')!=null){

                     opener.document.getElementById('yzjbxx.xzqhwz').value=orgName;

                     }

          <!帶回到相應的頁面的相應文本框。

                 else{ opener.document.getElementById('xzqhwz.pxzqhwz').value=orgName;

                     opener.document.getElementById('xzqhwz.parentxzqhwz.id').value=id;

                     window.close();

          }

                 }

               </string>

              </void>

              <void property="action">

               <string>{js}backAgent([#id],"'[#xzqhwz]"');</string>

          <!在樹型結構上通過雙擊一個節(jié)點,獲取帶回該節(jié)點的各級上節(jié)點

          <string>{js}backAgent([#id],"'[#parentxzqhwz.parentxzqhwz.parentxzqhwz.xzqhwz][#parentxzqhwz.parentxzqhwz.xzqhwz][#parentxzqhwz.xzqhwz][#xzqhwz]"');</string>

          > 

              </void>

             </object>

           </void>

          修改XzqhwzEdit.jsp頁面

          C:"Program"hi-studio"eclipse"workspace"earch5"web"zdtree"XzqhwzEdit.jsp

          onclick="xzqhwz_lookupPOP('parentxzqhwz')"

          改為:

          onclick="window.open('/tree.action?menuName=zdtree','部門','width=300,height=500,left=10,top=20,location=no,status=no')"

          這樣,到Xzqhwz的頁面,點擊父節(jié)點的帶回按鈕即可看到效果,同樣lookupxzqhwz字段的地方也修改Edit.jsp頁面的onclick動作就行啦。



          該文檔是對J-Hi樹形的入門級介紹,J-Hi的樹功能還有:節(jié)點的過濾,lazy加載,一個節(jié)點可以多個圖標、復選框效果,多個實體組合形成一棵樹,我們將在以后繼續(xù)講解


                                               注:該文檔由J-Hi愛好者"馮思豪"提供,他的QQ號為382600911,歡迎大家與他在技術上多多交流

          posted @ 2011-05-12 00:58 張昊 閱讀(1002) | 評論 (0)編輯 收藏

              J-Hi平臺在考慮到開發(fā)時與發(fā)布后對信息、安全、效率等方面的要求不同,從而提供了設置開發(fā)模式與發(fā)布模式的開關。這個開關配置在src下的hiFrameworkConfig.properties文件中。
          hi.depolyment.published=true
              下面讓我們就這個開關項做如下分析,如果值為true,也就是發(fā)布模式,它到底會影響哪些東西:

          信息內容
             1)菜單中“權限”、“權限資源”將不在顯示,因為一旦將做好的項目發(fā)布后,這些信息是不能讓客戶維護的。
             2)菜單中“觸發(fā)器”、“消息管理”將不可見,因為一旦定時服務設定好,一般來說客戶很少會調整,即使是調整也應該是由開發(fā)人員來調整觸發(fā)的周期與頻率。對于消息管理也是一樣。
             3) 整個“國際化”菜單項全部不顯示,這其中包括“多語言參數”、“語言編碼”、“時區(qū)”,原因這些內部均應該在開發(fā)過程中將信息內容一并編輯完成。比如有一個語言編碼就要有一套多語言參數與之對應,因些一旦系統(tǒng)上線,所有國際化部分的維護功能也應該同時完成。
             4)“應用配置”列表中,“刪除”圖標將不再顯示,因為如果系統(tǒng)上線,系統(tǒng)中的一些基礎配置項是不能刪除,而只能更改的

          對于這個功能的控制,是在main.jsp中,加入一個變量,代碼如下
          <%// 是否已發(fā)布的開關,其目的是如果為true則關閉那些對終端用戶不可見的功能按鈕 %>
          <ws:set name="published" value="@org.hi.framework.HiConfigHolder@getPublished()" />
          建議大家以后在自己采用J-Hi開發(fā)的系統(tǒng)中也可以采用該方式來控制頁面,這樣就可以做到即不影響開發(fā),而在項目提交給用戶時同樣保證某些只在開發(fā)時才能用到的按鈕或功能,只要改變一個開關就可以控制。 

          安全
             如果采用了發(fā)布模式后,頁面提交的URL將會被加密,而開發(fā)模式URL則是以明文顯示,開關則試前后URL的效果如下:
          http://localhost:8080/hiUserEdit.action?hiUser.id=1
          http://localhost:8080/hiUserEdit.action?cf4a9619dd97fc2689fb63048237404f
             由此可以看出URL問號后的參數部分全部通過了加密處理,這樣使您做出的系統(tǒng)更安全,通過使別人URL分析不出你要獲取的信息參與也推導不出系統(tǒng)的結構

          效率
             1)如果是發(fā)布模式,DWZ版的所有js文件將采用壓縮的文件,而非一個一個的離散文件,這樣系統(tǒng)的傳輸的內容會更少,具體的方式參見styles.jsp文件
             2)如果是發(fā)布模式,系統(tǒng)在啟動時一次性加載枚舉實體枚舉值多語言參數應用配置這些常量性的信息進入緩存,在取這些信息時系統(tǒng)會自動從緩沖中取而并非每都要查詢數據庫。舉例來說,性別是一個下拉的枚舉,如果是發(fā)布模式只直接從緩沖區(qū)中取數據,而如果是開發(fā)模式它就會去數據庫中取數據,如果是一個人員列表,那么有幾個要顯示枚舉的地方就要去數據庫取幾次。因此開發(fā)模式的運行效率要遠遠低于發(fā)布模式,但開發(fā)模式更有實效性,只要數據有任何變化都可以實體的反應出來,即使是在同一個事務中,而發(fā)布模式只能在一個事務完成之后再能做數據同步處理(即內存與數據庫之間的數據同步)
          posted @ 2011-05-08 22:12 張昊 閱讀(730) | 評論 (0)編輯 收藏


          J-HiDWZ兩個國內優(yōu)秀的開源項目強強聯合,攜手推出J-Hi4DWZ版。

           

           

          登錄頁面

          首頁面

          J-Hi生成器生成的編輯頁面:使你不用寫任何一行代碼就能實現富文本編輯、頁面校驗、上傳附件、自動帶回、主從表編輯等功能

           

          角色分派頁面:可以看到平臺提供左側樹型結構(無需任何編碼,簡單配置即可)


          當然樹還可以做成是彈出帶回值效果

           

           

          更新日志:

          1、融合DWZ富客戶端做前端頁面展示

          2、支持跨瀏覽器包括IE6\7\8\9 FireFox

          3、實現webworkstruts2無配置文件解決方案

          4、插件增加懸浮聯機幫助

          5、支持實體復制

           

          1、解決登錄用戶的信息與數據庫信息不一致的問題

          2、解決多語言標簽緩存問題

          3、生成時如果有從表不在菜單顯示

          4、解決在struts下角色、權限、人員會有垃圾數據問題

          5、增加二個對菜單樹的過濾的接口,及回調實現

          6、修改了對菜單樹非整數型的配置方法

          7、解決加刪除標識符的實體未做過濾的問題

          8、優(yōu)化了webworkstruts的基類BaseAction

           

          開發(fā)人員列表:

          人員

          主要工作

          張慧華

          dwz集成,富客戶端開發(fā)

          楊新峰

          Eclipse插件開發(fā)

          張昊

          生成器及底層開發(fā)

          肖金華、尹福泉

          修改平臺功能頁面,修改bug

          測試人員列表:

               羅天文、伏占才、宋藝、肖金華、張昊

           

          下載地址:http://code.google.com/p/j-hi/downloads/list

          J-Hihttp://code.google.com/p/j-hi/

          DWZhttp://code.google.com/p/dwz/

           

          線上交流:133176937(滿),133177634(滿),133178083,134232577

           

          相關文章寫在J-Hi for DWZ版發(fā)布的前夜

                          J-Hi快速開發(fā)平臺到底快速在哪里?

                          “J-Hi”Java開源平臺的生力軍

           

          下一步計劃:

          1)  融合SpringJDBC

          2)  支持實體從數據庫反向導入并生成代碼

          3)  支持樹形組件的可視化配置

           

          posted @ 2011-05-04 15:18 張昊 閱讀(3447) | 評論 (7)編輯 收藏

          1、快速上手,降低學習曲線

                 對于剛剛接觸J-Hi的人來說,它上手很容易,我們?yōu)槊恳粋€功能點都提供了懸浮幫助功能,即使沒有任何資料(當然我們已提供了視頻與開發(fā)文檔),您也可以通過向導與幫助在十分鐘之內就可以創(chuàng)建出您自己的項目原型。

                 其次J-Hi平臺采用的大都是大家耳熟能詳的主流框架與技術,如果您對主流的框架有所了解,那么對J-Hi的學習就沒有任何阻力了。

          2、快速搭建開發(fā)環(huán)境

                 也許您因為項目或自身開發(fā)團隊的不同會采用不同的框架技術,例如您團隊中對struts2熟悉的人遠遠要比掌握webwork的工程師要多,或者在您的項目中統(tǒng)計分析的功能很多,您要考慮ORM的效率問題,而不得不放棄hibernate而采用ibatisspringJDBC,也許您還要考慮數據庫問題等等。在搭建開發(fā)環(huán)境您一定會考慮很多因素,盡管搭建開發(fā)環(huán)境并不復雜,但還是不夠自動化,還要手動的配置,費時費力。J-Hi為快速搭建開發(fā)環(huán)境提供合理的解決方案,您可以按需求動態(tài)的搭建開發(fā)環(huán)境。

          在此您可以選擇不同的ORM框架

          在此您可以選擇不同的表現層框架

          在此您可以選擇不同的頁面框架,并且我們提供了“預覽”讓您在搭建開發(fā)環(huán)境之前就可以看到搭建后的頁面顯示效果

          在此您可以選擇不同的數據庫。

          3、快速生成所有代碼

                 通過建立或導入模式,您可以快速的生成所有代碼與文件,并且在生成時會根據您選擇的框架技術與數據庫的不同而自動適配。

                 當然您還可以有選擇的生成部分代碼文件,例如只生成JSP頁面,或只生成java代碼。生成的java代碼結構如下(因為我選擇的框架是ibatis3+struts2,所以平臺會自動匹配只生成與這兩個框架相關的類文件,而不會生成無用的其它框架的東西):

          4、快速解決在業(yè)務需求中的技術難點

                 一般我們在做項目開發(fā)時,總是要等到項目開發(fā)的中、后期才能去解決業(yè)務核心問題,因此很造成無法合理估計項目的技術風險。原因是復雜的業(yè)務總是要等到基礎模塊建好后才能進入到開發(fā)階段,從而使解決核心的技術問題置后。我們以一個報銷為例來做個簡單說明,比如報銷在審核后的業(yè)務邏輯很復雜并且有可能還要涉及到與其它的系統(tǒng)對接。一般來說我們總是要等到這個報銷單建好,起碼要有最基本的增刪查改功能(即使沒有頁面也要有后臺的代碼)后才能進入到核心業(yè)務的開發(fā),這就加大的技術風險,因為我們會很早的發(fā)現問題,但解決這些問題卻遠遠的落后于發(fā)現這個問題,甚至到了開發(fā)的中、后期因為技術問題在底層上還要一改再改。而使用J-Hi可以很快的進入到業(yè)務核心的技術上,因為只要生成,基礎功能就已經提供,甚至平臺還為您提供了單元測試用例類,從而使您可以直指業(yè)務核心,將項目風險控制在最低。

          5、通過提供通用的組件

                 平臺提供了很多通用業(yè)務組件,例如組織機構、角色權限、報表、定時任務、菜單管理、日志管理、系統(tǒng)配置、附件上傳等等,除此之外平臺還提供了一些純技術組件,例如樹型結構、java腳本工具、編碼生成器、可選擇性的返回JSON對象等等。這些通用的業(yè)務組件與技術組件可以為您在開發(fā)過程節(jié)省很多時間,隨需使用,從而大大降低開發(fā)速度。

          6、通過服務的復用性提高開發(fā)速度

                 在介紹平臺的服務復用性之前,讓我們來舉個例子。比如您做了一個OA項目其中有一個模塊是報銷管理這個模塊很成熟,您已經在OA系統(tǒng)中應用了很久。現在又有一個ERP系統(tǒng),您想把這個成熟的報銷管理復制到ERP系統(tǒng)中,這樣這個功能就不用在ERP系統(tǒng)中再做開發(fā)了。對于平臺來說這就是服務的復用性,我們提供了一整套對服務復用性的解決方案,并且有自己的可視化工具。

          我們叫它J-Hi整合工具,是用C#做的。它的作用:

               1)可視化導入/導出數據庫,并同時實現跨數據庫,例如您可以在mysql上開發(fā)(導出),開發(fā)完將所有的數據遷移到oracle上(導入)。

               2)發(fā)布器,可視化將您開發(fā)的模塊或系統(tǒng)自動發(fā)布成一個發(fā)布包(包括數據庫、jar、文件[jsp、js、圖片、配置文件等]還包括文件的片段[例如修改web.xml文件中的一部分內容]

               3)部署器,將發(fā)布包部署到開發(fā)的工程中,部署的內容見發(fā)布器的描述

               4)實施器,對應的生產系統(tǒng),我們通過FTP,將相應的文件與數據庫自動部署到生產系統(tǒng)中

          7、快速的部署與遷移

                 也許您正在為客戶要求從SQLServer數據庫改為Oracle而感到苦惱,因為這要做大量的數據遷移工作,或許您反復的將修改后的bug部署到生產環(huán)境中而郁悶,我想J-Hi通過它的整合工具為您提供了便捷的方式。具體的實現方式請參見上一節(jié)的介紹

          8、開發(fā)人員可以快速的接手別人的工作

                 因為使用J-Hi開發(fā),生成的代碼與文件的風格都是相同的,在哪里寫業(yè)務邏輯應該怎么寫?在哪里要改頁面應該怎么做?想要到哪張數據庫表或表與類的對應關系?包括生成的類、JSP文件、配置文件的命名規(guī)則都是統(tǒng)一的。因此一個新人加入團隊會很容易的上手并進入工作狀態(tài),即使是修改別人寫過的代碼,也會很快速的定位到相應要修改的位置。

          9、快速解決需求變更

                 對于項目開發(fā)來說,項目的需求變更是很正常的事情,對于有經驗的項目經理來說,如果一個項目從未發(fā)生過需求變更過反而是不正常了:)一但需求變更大多都要改數據庫表,如果是已運行很穩(wěn)定的系統(tǒng),這種變更真是要命。J-Hi為此也提供了自己的解決方案,對于簡單表變更,平臺只要對單個實體生成就可以了。如果是復雜的變更,我們還提供繼承實體的解決方案,也就是說原來的所有代碼與表結構都不變,通過實體繼承J-Hi會從數據庫表到java類再到JSP頁面形成一整套繼承關系,從而保證以前功能的穩(wěn)定性。這個說來好象很玄妙,讓我們舉例說明。比如你有一個部門表,N多信息都與它有聯系,而且做了很多的業(yè)務處理,現在客戶要求在部門表中加另一些信息。對你來說可能會為部門表中加字段,由此而帶來所有類的變化與頁面的變化,而這套系統(tǒng)已經很穩(wěn)定已經用了一、兩年了,開發(fā)人員都已經離開了公司,這樣接手的人要讀懂全部代碼才有可能改,這樣就造成開發(fā)速度的大大降低。平臺提供了另一種解決方案:不動以前的任何東西,相關于在原有的基礎上打上一塊補丁。再做一張表,讓這張表與部門表形成one to one的關系,而類無論是POJODAOService都繼承自部門相應類作為父類,同時在JSP頁面上也會繼承所有部門的所有元素,這樣就形成了實體繼承關系,這就好比設計模式中最基本的“開閉原則”,對于所有的新生功能是開放的,而對于已有的老功能是關閉的,可以完全把老的功能視為一個黑箱。這樣即能保證已有功能的穩(wěn)定性,又能加入新的功能做為補充。

          posted @ 2011-05-02 00:32 張昊 閱讀(6512) | 評論 (8)編輯 收藏

          僅列出標題
          共5頁: 1 2 3 4 5 下一頁 
          主站蜘蛛池模板: 瓮安县| 佛教| 崇义县| 洪雅县| 剑阁县| 鹤庆县| 广西| 大英县| 通州区| 手游| 定南县| 图们市| 会昌县| 三台县| 射洪县| 临安市| 侯马市| 衡南县| 宜春市| 安吉县| 米泉市| 新乐市| 西乡县| 新余市| 武山县| 会东县| 黄浦区| 郸城县| 科技| 凤台县| 聂拉木县| 株洲市| 伊通| 辽阳市| 九寨沟县| 大石桥市| 聊城市| 宁远县| 六枝特区| 宁南县| 新丰县|