業務服務開發易錯點
有一些Bug是由於系統設計不合理導致的,比如多入口問題。導致系統或許擴充套件複雜,維護困難;比如欄位修改問題,系統很多地方不是模組化的,都是程式碼的直接複製貼上, 導致維護非常困難,改一個欄位,要改很多地方,並且容易出錯。更進一步會對系統設計進行分析,從根本上讓這些Bug少產生。給以後設計系統時提供支援。
# # 入口問題
問題原因:專案維護或者改造的時候,有新需求,改欄位或者加欄位,如果對專案入口不熟悉,會出現隱藏需求漏改的情況。
措施:首先學會使用系統,熟悉系統的各個按鈕、超連結、tab頁,分析系統的主要功能,各個功能的入口,新增、刪除、編輯、匯入、匯出、修改等
案例分析: 實車流程啟動入口:初步錄入提交,正式建立提交,暫存編輯提交,批量下達提交,暫存區發起整改 批量下達提交是對已有資料更新,預設值加了沒有效果,因為不是新建的資料。還是要在5個入口的相應位置新增設定標識的程式碼
需求新增一個流程節點,事後發現系統有5個入口ABCDE。
# # 新需求相容老需求問題
問題原因: 1. 有些新需求,比如,加欄位,是不是要改這個欄位所有出現的地方 2. 比如,介面加了欄位,要求在各個狀態變更時,將新加的欄位回傳回去,那麼已經跑的流程,是處於中間狀態的。需要在系統裡判斷如果新欄位為空的情況,傳過去預設值還是空字串。 3. 在新老流程相容時,最好是資料庫中相容欄位加預設值,這樣新建立的比如預設1。
# # 工作流啟動後停在發起流程節點。
原因:工作流人員設定錯誤
需要在檢視頁面刪除分配使用者,重新設定儲存,釋出
# # 前端樣式或者js修改無效果的情況
樣式沒效果,可以在樣式上加!強制生效。 還有的情況是,多個頁面可能用的是同名的class,最好在每個頁面設定不同的namespace,防止樣式衝突。然後這樣去設定樣式 .父class .子class
js函式也需要為不同的頁面設定不同的namespace,可以定義一個代表當期頁面的物件,讓方法和屬性都繫結到這個物件上
<button type="button" class="close" ></button>
對它繫結一個點選方法 $(".close").on("click",function(){ //關閉邏輯 return false; });
return false;想讓點取消後不關閉,發現沒有效果。剛搜了dwz的原始碼發現有一個這個鬼:
$("a.close", dialog).click(function(event){ $.pdialog.close(dialog); return false; }); <button type="button" class="submit" ></button>
# # 實車匯入未對擴充套件欄位的長度限制
大部分欄位在系統執行時,是動態傳遞的,必須統一所有這個欄位用到的地方的欄位長度,否則使用者剛好填了一個最大值,可能設定欄位長度小的地方會出現Bug。
# # Mybatis問題1
編輯(update)的時候,必填項需要在mybatis中判斷<if test="extend01!=null and extend01!=''"> 不必填可以為空,只需判斷不是null,<if test="extend01!=null ">,否則將不必填的內容清空後,更新無效
# # 前端問題1
$("#jdsc").find("input").each((index,elem) => console.log(elem)); $("#jdsc").find("input").attr("disabled",false);
# # jquery元素轉dom元素
var problemSource = $("#problemSource_id")[0];
# # 流程狀態變更 需要記錄日誌
記錄日誌可以使用切面程式設計,使用Spring aop
# # 前端問題
新問題建立後,自動排序了 查詢條件planStepStatus預設返回了"null"
# # 環境問題
頭暈,居然在119上測了半天本地改的東西,立馬轉到localhost
# # 國際化問題
狀態錯誤,國際化資源提示
# # 在修改的時候,延期時間重新計算
修改計劃關閉時間,重新計算應完成時間
# # 時間問題
延期時間計算,一般使用者不希望當天算延期,所以sql條件中計算的時候注意,and planDT + 1 < sysdate
# # 記錄問題跟蹤
# # 修改記錄問題
比較修改前後無變有,有變無;少變多,多變少
只有修改的欄位才記錄日誌
修改項顏色高亮標記
# # 綜合問題
如果擴充套件功能,考慮功能使用前後的差異,需要做相容,通常需要在一些差異點判斷非空。
比如,加一個欄位。不僅要在所有用到的地方加。還需要考慮之前的已經在流程中的item,這些item之前的路徑中沒有這個新加的欄位,後續繼續走流程,需要判斷這些老item的 這個欄位為空的情況。
這點讓我想到Hotspot虛擬機器的解決方案,為了解決GC時,不會產生新的引用關係,會讓系統停頓,就是Stop the word。讓整個系統狀態一致。否則,一邊GC,一邊產生新的引用關係, 這樣沒辦法控制。 HotSpot採用的是主動式中斷方式,需要中斷時,比如堆記憶體達到臨界值。就在安全點設定標記,執行緒輪詢中斷標記,如果為true,就自己中斷。