ERP平臺開發(fā)過程分析_第1頁
ERP平臺開發(fā)過程分析_第2頁
ERP平臺開發(fā)過程分析_第3頁
ERP平臺開發(fā)過程分析_第4頁
ERP平臺開發(fā)過程分析_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、ERP 平臺開發(fā)過程注意事項.說明本文是以程序員的視角出發(fā),針對基于 ERP 開發(fā)平臺上業(yè)務(wù)開發(fā)過程中遇到的問題及相關(guān)注意事項進行總結(jié)成冊, 對我們的經(jīng)驗及時總結(jié)共享, 方便大家 日后進行參照和查閱?;?ERP 開發(fā)平臺上業(yè)務(wù)開發(fā),大致有四個過程:理解需求,業(yè)務(wù)設(shè)計,業(yè)務(wù)開發(fā),用例測試;每一個環(huán)節(jié)都十分重要,不能輕視任何一個階段。. 理解需求基本要求拿到需求文檔后, 首先對需求文檔進行粗略閱讀, 查看該用例有幾個功能點,有幾個主要分支。 有哪些前置用例和后置用例 (目的是為了組內(nèi)交流, 確認需求設(shè)計是否步調(diào)統(tǒng)一)。用例是哪種類型(可以根據(jù)類型,確定出有哪些注意點需要進一步完善)。注意事項了解

2、基本功能后, 就需要進一步詳細理解需求文檔, 著重關(guān)注以下幾個方面:需求文檔總的邏輯是否只有if沒有else,如果有兩個排斥分支,那 么這兩個排斥分支是否在邏輯上就存在著排斥關(guān)系。(考察需求邏輯的完整性,避免特定場景的問題發(fā)生)根據(jù)條件查詢表的數(shù)據(jù)時,是否按照業(yè)務(wù)主鍵(根據(jù)TF表去查看業(yè)務(wù)主鍵)查找,是否能夠查詢到數(shù)據(jù),如果沒有查詢到數(shù)據(jù),該如何處理(是 發(fā)布消息還是繼續(xù)),如果查詢到數(shù)據(jù),是否有可能返回多條數(shù)據(jù),查詢出記錄 后,需要使用的屬性是否為空,如果空該如何處理。(避免程序運行的空指針異 常)各個校驗的規(guī)則,當(dāng)前是否只是對單個數(shù)據(jù)進行校驗, 以后是否支 持批量校驗。類似“期間”的字段,

3、在查詢和保存時,是否需要補齊;類似“編 號”的字段,是否有非數(shù)字的字符,如果只有數(shù)字,那么在排序時,是否按照 數(shù)字的規(guī)律進行排序;類似“行號”的字段,是否需要補齊,排序時是否按照 數(shù)字的規(guī)律進行排序;枚舉值是否同給定的枚舉值表統(tǒng)一;百分比類的字段, 存儲值是否為*100%后的數(shù)值。使用時,是否需要/100%。(為模塊之間的統(tǒng)一 處理奠定基礎(chǔ))充分利用需求文檔中前置用例,后置用例,充分挖掘各個用例之間 的關(guān)系。遇到不懂的問題,不要立即詢問需求,在積累一定量的問題后,再 考慮尋求需求人員的幫助;在最佳的時間尋求需求的支援。(可能看了后面的需 求,前面就明白了)考慮將需求文檔備份,在備份上注釋出對需

4、求的理解包括不懂的問 題和自己的理解概括。3.業(yè)務(wù)設(shè)計基本要點基于面向?qū)ο笏枷耄瑢τ美M行分析設(shè)計;注意事項設(shè)計是在對需求詳細了解的基礎(chǔ)上進行的;花費一定的時間進行了設(shè)計是有意義的一一磨刀不誤砍柴功;設(shè)計并不是說必須繪制出各種類圖、順 序圖;設(shè)計的內(nèi)容需要有一定的載體記錄,哪怕是一張草紙,一個類、方法、 變量的注釋(設(shè)計的平民化,設(shè)計無處不在)。合理封裝模型,考慮以下幾個方面:輸入條件和查詢的數(shù)據(jù)(包括 描述)的存儲方式,減少公共方法的聲明(多聲明一個就意味多一份責(zé)任)。數(shù)據(jù)集合的存儲,數(shù)值類型的屬性是否有初始值0o加鎖解鎖的合理性,數(shù)據(jù)傳遞的合理性(數(shù)據(jù)量大小決定不同的屏 幕傳遞方式,PBO

5、或緩存方式)。錄入類用例,當(dāng)前是否只是處理錄入一條,以后是否支持批量錄入。是否采用了 MVC模式,界面和模型有相互轉(zhuǎn)換的方式,PAI和CPBO在設(shè)置值到界面的功能上,是否采用了調(diào)用同一個方法。是否有必要將界面的域名用一個類封裝起來,是否有必要將整個事 務(wù)的緩存鍵字用一個類封裝起來。功能、業(yè)務(wù)邏輯類似的用例,是否可以采用統(tǒng)一的方法進行處理(考 慮反射的調(diào)用)設(shè)計中是否考慮系統(tǒng)的性能,避免日后因為性能原因?qū)⒂美霐?shù)推 倒。設(shè)計是否充分考慮性能問題,對于鎖也要充分重視,是否需要加鎖, 加什么樣的鎖,對什么加鎖何時解鎖 趙利華4.業(yè)務(wù)開發(fā)基本說明版權(quán)聲明的書寫,每個類的代碼必須要有版權(quán)聲明。注釋的書寫

6、:類文件注釋和方法中注釋。類文件已經(jīng)要記錄文件的 基本用途和關(guān)聯(lián)窗口的信息,例如主窗口名稱等。方法的注釋要寫明方法的目 的,凡是在代碼中聲明的集合變量,一定要注釋出集合中數(shù)據(jù)的存儲格式(包 括類文件中的屬性變量、參數(shù)變量、臨時變量),方便日后的查找和用例的交接。 這里作者中文名是必須的(EJB方法和多人合作編寫的類的方法)。如果是更改他 人的程序,一定要要變更注釋,標(biāo)明更改人和更改時間,在方法的入口,要用 debug打出數(shù)據(jù)參數(shù),在捕獲異常的時候也要用debug打出可供理解的信息 王宇仁開發(fā)工具JBuilder的快捷鍵的使用,完全由自己編寫的一個類的代 碼提交前,用格式化方式將代碼格式化(Ct

7、l+Shift+K),并優(yōu)化導(dǎo)入的類(Ctl+I), 導(dǎo)入的類一定要指定具體的類,而不是將整個包導(dǎo)入 ,查詢類文件(Ctl+減號), 查詢代碼在路徑中的應(yīng)用(Ctrl+P),在當(dāng)前類中的應(yīng)用(Ctl+F)熟悉開發(fā)環(huán)境中應(yīng)用包的配置、服務(wù)的配置、引用代碼的優(yōu)先級、weblogic 的配置應(yīng)用,并能指導(dǎo)其他同志進行配置。逐漸熟悉底層代碼的處理方式,減少問題的解決成本。程序中的編碼除了注釋,日志外,不允許有直接引用漢字的位置,需要出現(xiàn)漢字必須通過資源文件的形式, 邏輯不完整的處理,可以采用Debug.logError() 的處理。程序中出現(xiàn)的常量, 對于自己增加的控制程序分支的常量, 盡量采用包含語

8、意的常量進行控制, 而不是直接聲明為 1.2,3等, 邏輯判斷常量放在前。避免大方法和大類的出現(xiàn),細化抽取方法( PAI 中避免所有的詳細處理代碼都在pai()方法中)建立一種思維: 凡是有規(guī)律可遵循的操作, 建議都將其用方法封裝起來。便于代碼的精簡和維護。注意事項獲取當(dāng)前日期,調(diào)用 CGlobleUtil/SGlobleUtil.getServerTime(),而不 是用 System.currentTimeMillis ()日期的比較,不能簡單的調(diào)用 Date.before()或者Date.after()方法進 行比較,而是要先查看這里的日期是否需要比較時分秒。日歷(Calendar)中日

9、期的月份是從0開始的。通過日歷類設(shè)置日期 的值時,要考慮月份的開始值問題。數(shù)值類型尤其是BigDecimal類型,要即使進行四舍五入的處理(注 意保留的小數(shù)位并不都是2位)。是否相等,要用compareTo(),進行比較。發(fā)布消息時,消息中的參數(shù),日期要符合當(dāng)前用戶的日期格式,數(shù) 值要保留相應(yīng)的小數(shù)位,百分比要在最后增加百分比符號。記錄用Map存儲時,如果用業(yè)務(wù)主鍵做鍵,復(fù)合的業(yè)務(wù)主鍵,盡 量不要用字符串連接做鍵,而要用專門的數(shù)組模型做鍵(例如 ArrayInterface(SimpleArrayImp)。Map 效率比 List 要高李平參數(shù)的應(yīng)用傳遞,List對象被調(diào)用的方法更改,則該參數(shù)

10、也被更改查詢出記錄后,然后執(zhí)行set方法,后來又flush(),則數(shù)據(jù)會更新 到數(shù)據(jù)中。循環(huán)嵌套循環(huán)時,需要注意循環(huán)索引變量是否引用正確。搜索幫助。定義的搜索幫助,如果有描述作為輸出項,那么也要將 描述作為輸入項。自定義的搜索幫助是否支持模糊(*、?)查詢。迭代器(Interator)的正確循環(huán)處理。Object類的關(guān)鍵方法的含義和應(yīng)用:equals。:在List.contains()中被 調(diào)用,hashCode():在Map.put()中被調(diào)用,clone():在數(shù)據(jù)復(fù)制中應(yīng)用排序的處理:利用 TreeSet,TreeMap()進行處理,Comparable的接 口 的含義,compareT

11、o();合理利用反射(只在必要的時候使用:數(shù)據(jù)量不大時,反射不一定 用真正的反射)。在使用循環(huán)語句是,變量要盡可能放在循環(huán)體外,同時判斷條件, 注意用break,continue減少循環(huán)的次數(shù) 王宇仁客戶段開發(fā):界面的繪制是否滿足高度、寬度要求(特別是標(biāo)簽) ;類型是否正確,是否顯示數(shù)字類型數(shù)據(jù),卻用了字符串類型控件;年度和期間是否應(yīng)該使用位補齊類型數(shù)字字符串;是否上、下、左、右間距滿足要求。是否應(yīng)該繪制為搜索幫助類型 (尤其是顯示類型的域, 為將來描述 查詢、表格定位打好基礎(chǔ))表格中的列的坐標(biāo)是否方便日后列的增加, 是否可以將列標(biāo)題顯示 完整。窗口的描述信息是否定義完整,例如:表格屏幕的定義

12、是否完整, 影響數(shù)據(jù)導(dǎo)出默認的文件名。是否會使用繪制的屏幕保存為模板,以作備份。數(shù)值類型的數(shù)據(jù), 界面為空, 獲取后, 是否有必要設(shè)置為初始值0。表格類型的數(shù)據(jù),取一行的數(shù)據(jù),是否用 getColumnValue(),逐個 單元格獲取。 getRowValue(int row)。采用ServiceProxyFactory.getService欲取服務(wù),然后調(diào)用具體的服 務(wù),這樣可以避免服務(wù)更改了,但是調(diào)用者不知道,導(dǎo)致編譯不出錯,但是運 行出錯。調(diào)用的服務(wù)方法參數(shù)為 int,long 等小數(shù)據(jù)類型時,傳遞的類型是int.class, 10ng.class,數(shù)組 Object,應(yīng)該用 Objec

13、t.class是否將消息的內(nèi)容重復(fù)的消息過濾掉了, 是否有錯誤消息時, 設(shè)置 了錯誤域。通常采用統(tǒng)一的方式發(fā)布,即調(diào)用CGlobleUtil.showMessage()方法發(fā)布多個消息,而不是采取循環(huán)發(fā)布每個消息。需求有特殊要求則除外必須用 Message.RETURN_HASWRONG 等判斷,不允許用固定的2 等固定值判斷PAI 中拆分各個功能碼對應(yīng)的處理方法,將PAI 方法處理的各個功能處理過程單獨提取一個方法。 PAI 中對各個功能碼只是進行簡單的邏輯處理。按照一定的邏輯分支編寫事件處理,例如:先寫 GUI 事件,然后是焦點事件,回車事件等。邏輯結(jié)構(gòu)清晰,便于調(diào)試。合理利用標(biāo)志位處理焦

14、 點事件的連續(xù)觸發(fā),下拉框事件的相互影響。表格焦點事件的處理,對于失去焦點的行要正確的處理(針對行不同的失去焦點方式) :/2006-05-30,武志君,失去焦點必須按照底層的這種處理方式/得到行索引 int row = unclearCtl.getSelectedFromRow();/如果不正確,則必須更改為其他方法if (row = -1) row = unclearCtl.getSelectedRow();數(shù)據(jù)的設(shè)置表格的設(shè)置采取優(yōu)化處理方式:TableSubwindowCtl:addRow()addRow(false)addRowGreat()TableScreen.refreshSc

15、reen();表格選擇行的判斷即是否有表格選擇行的判斷:FIClientUtil. isTableHasSelRows() int rows口 = twCtl.getSelectRows();/如果行的索引空,長度為0,或長度只有1個,但是為都認為無效 if (rows = null | rows.length = 0 | rows.length = 1 & rows0 = -1) return null;else /M他的情況則認為有效return rows;)其他處理(1)在CPBO的beforeShow方法中,如果想要獲取當(dāng)前的主窗口號,使用 CGlobleUtil.getCurrent

16、FrameNumber();_張惠君(2)進入用例時設(shè)置 GUI、域的山藏,在CPBO中的beforeShowForward() 內(nèi)完成,避免顯示后又消失_李洪波(3)對于界面域比較多而用例,可以考慮用類名加屬性名來定義域名,將 所有的域名用一個類來封裝,用實體類封裝模型。采用反射方法來取值,賦值。 _李洪波(4)對于查詢類用例,界面涉及到的區(qū)間查詢,統(tǒng)一使用底層提供的多選 控件處理,以保證風(fēng)格統(tǒng)一和后期維護方便。一李凡(5)在給界面賦值時在PBO中賦值要比在CPBO中賦值效率要好得多,保 證客戶端在保存前調(diào)用兩個方法,一個是客戶端校驗一個是服務(wù)端校驗和保存。 客戶端校驗方法第一個任務(wù)就是對必

17、輸項進行runcheck()校驗,不管界面有沒有必輸項_人事組(6)在轎車升級過程中,由于小版本升級,數(shù)據(jù)庫不同步,但是咱們平臺機 制是,如果主窗口不是穩(wěn)定主窗口,子窗口信息就會去讀數(shù)據(jù)庫,造成升級處理起 來十分繁瑣,因此開發(fā)過程中在畫主窗口時,一定要選穩(wěn)定主窗口 趙利華(7)搜索幫助如果有描述相關(guān)數(shù)據(jù),必須考慮描述是否作為查詢條件。緩存的正確使用FrameTran級別:事務(wù)結(jié)束后,該緩存自動清空,在 PAI的beforeClose() 不用考慮清除。Frame級別:當(dāng)前Frame后,該緩存自動清空,需要自己控制清除,該事 務(wù)的所有PAI方法的beforeClose(),都需要主動清空Glob

18、le級別:客戶端結(jié)束時,該緩存自動清空,需要自己控制清除,該事 務(wù)的所有PAI方法的beforeClose(),都需要主動清空合理利用PAI中g(shù)ainRes()方法,PAI, CPBO具有相同的賦值功能,要提取 出來,作為靜態(tài)方法。在用例結(jié)束時緩存數(shù)據(jù)的清除上要注意,如果是可能會被他人調(diào)用的用例, 不要使用全部清除的方法,否則可能會出現(xiàn)錯誤 銷售組窗口和對話框的啟動2007-5-20 補充主窗口和對話框的啟動目前都有兩種方式, 一種是以窗口 ID作為參數(shù),另 一種是以窗口名作為參數(shù),對于主窗口,以 ID為參數(shù),必然讀取數(shù)據(jù)庫,以窗 口名啟動,如果主窗口的實現(xiàn)類是穩(wěn)定主窗口, 則不需要讀數(shù)據(jù)庫,

19、而是直接讀 取資源文件,此種情況對于小版本升級就可以不需要同步數(shù)據(jù)庫。對話框的啟動目前無論是哪種方式啟動都需要讀數(shù)據(jù)庫, 但是未來可能會進行改造為同主窗口 一樣的處理,具體的代碼,請參考:代碼開發(fā)示意圖啟動窗口和對話框的方式.bmp1.8服務(wù)端開發(fā):回滾的書寫格式。(1)有更改數(shù)據(jù)庫操作的服務(wù)方法,在捕獲 Hiernate異常,捕獲 QMException ,捕獲Exception時,都需要回滾,方法返回全局模型 GlobleResultMdl,需要判斷錯誤消息,然后進行相應(yīng)的回滾處理。(2)對于PBO調(diào)用的EJB方法,如果執(zhí)行了回滾,那么在讀窗口的其 他信息時會造成 weblogic的內(nèi)部事

20、務(wù)異常,最終導(dǎo)致程序運行失敗。解決的方 式目前就是讓主窗口的實現(xiàn)類為穩(wěn)定主窗口,這樣啟動窗口就只讀資源文件,避免了執(zhí)行PBO的EJB方法然后再查詢窗口的信息,現(xiàn)象請參考圖片說明:代碼 開發(fā)經(jīng)驗PBO調(diào)用的EJB方法執(zhí)行了回滾代碼引發(fā)的問題.bmp2007-5-20 根據(jù)PCP406的演示準(zhǔn)備異常分析得到的結(jié)論。返回值類型的確定。建議所有的服務(wù)端方法,包括工具類方法,都以 GlobleResultMdl返回,適應(yīng) 日后需求的功能轉(zhuǎn)變和開發(fā)日后的功能擴充。盡可能少的新建對象,類似如下代 碼使用new是完全沒有必要的:GlobleResultMdl result = new GlobleResult

21、Mdl。;result = XXUtil.method() ; 徐利新消息的轉(zhuǎn)儲SGlobleUtil. procResultMdlMsg()方法和 SGlobleUtil. setCommonMessage()T法的 使用,不能查看需求提供的消息表,一看是錯誤的就直接返回了。查詢語句的優(yōu)化書寫(1)以工具類(FISQLUtil)的方式進行處理各個SQL語句的構(gòu)造。查詢語句 中不建議多個表之間的聯(lián)合查詢(數(shù)據(jù)的內(nèi)存占用考慮),連接關(guān)系的正確運用(2)查詢語句中對于不等于的查詢,是否包括為空的處理。(3)避免循環(huán)查詢數(shù)據(jù)庫,查詢的結(jié)果緩存起來,也可將子查詢語句作為 參數(shù)進行傳遞。(4)查詢數(shù)據(jù)的

22、時候,可能用到IN或是OR等連接數(shù)據(jù),IN在一定長度 還可以,多的時候會出現(xiàn)異常,可以都用 OR,但是數(shù)據(jù)超過一定長度,查詢會 很慢,可以采用每1000條查詢一次,但是我本人認為再數(shù)據(jù)量很大的時候這樣 也不會有很大的提高,我采用的是判斷需要查詢的條數(shù), 如果超過一定量,就把 所有的數(shù)據(jù)查詢出來,然后通過事先作好的MAP (鍵為要作為查詢的條件)來判斷那些是需要的數(shù)據(jù),放到集合中。 _王春艷(5)查詢的時候判斷那些屬性可能為空使用is null進行查詢銷售組加解鎖的處理(1)服務(wù)端直接加鎖,解鎖的方法,除原來的方法外,也可以用autoLock方法進行只 加不解(2)按照常量加鎖,可以把很多記錄都

23、鎖上,(3)按照查詢條件加鎖,根據(jù)查詢條件查詢出記錄后按照具體的記錄加鎖 的差異。(4)禁止循環(huán)調(diào)用加解鎖。任何鎖的處理必須考慮應(yīng)用環(huán)境默認的鎖定條件數(shù)據(jù)庫更改操作(1)批量插入時,根據(jù)數(shù)據(jù)量的大小和表的特點進行相應(yīng)的保存操作,(采用JDBC和Hibernate的兩個方式進行處理)。(2)對于有增、刪、改數(shù)據(jù)庫操作的數(shù)據(jù)時,正確的步驟應(yīng)該是:首先執(zhí)行刪除:session.delete(obj),session.flush(obj),然后執(zhí)行更新:sessioin.update(obj),session.flush(obj),最后執(zhí)行插入:session.save(obj),session.fl

24、ush(obj),按照上面操作的原因分析:當(dāng)前維護用例多數(shù)是不允許更改業(yè)務(wù)主鍵的, 但確實存在允許更改業(yè)務(wù)主鍵的用例, 考慮如下特殊場景:用戶刪除一條已有的 數(shù)據(jù),同時新建一條相同業(yè)務(wù)主鍵的數(shù)據(jù)或?qū)⒘硪粭l已存在的記錄更改為刪除已 有記錄的業(yè)務(wù)主鍵,此時在保存時必須先將上面的順序操作, 否必然會出現(xiàn)違反 唯一性約束的錯誤。(3)對于保存到數(shù)據(jù)庫的字符串,如果是動態(tài)構(gòu)造的話,要考慮其是否有 漢字,所占的字節(jié)是否會超過數(shù)據(jù)庫定義的最大長度。PBO中的設(shè)置值在PBO中為表格賦值等。這樣就可以減少日后優(yōu)化的工作量。*特別注意的一點在PBO中給表格賦值的時候,如果表中其中有的行不是所有的列都 要賦值,那么就要賦上上空值,否則會出現(xiàn)中行的情況*王春艷.測試(1)通過類的Main函數(shù)對該類的公有私有方法,進行測試,注意極限數(shù)據(jù)的測試。(2)進行程序是否出異常而不能進去(窗口的數(shù)據(jù)庫信息同資源文件的信息是否匹配,是否缺少傳遞窗口資源文件,是否缺少搜索幫助資源文件),同一個事務(wù)的各個窗口之間切換是否出異常;多個界面切換時,回退時,是否連續(xù)多次進入相同界面; 涉及到保存的用例,用戶執(zhí)行回退時,是否有界面數(shù)據(jù)是否發(fā)生更改提示保存的處理。(3)程序運行期間,是否設(shè)置第一個可輸入域為焦點。是否界面美觀大方:是否各個子 窗口的域之間對齊,是否各個域之間的間隔滿足標(biāo)準(zhǔn),是否使用了正確的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論