1. 程式人生 > >“供應鏈管理系統”專案階段性總結

“供應鏈管理系統”專案階段性總結

       本專案已經開發近一個月(2018.11.04開始),個人認為專案進度已經到了70%,基本實現主要的功能模組,後續30%的工作主要是測試+改bug。在這專案中,我負責的流程主要包括但不僅限於:倉庫盤點、門店盤點,門店退貨,門店廢棄、採購、採購退貨。期間我遇到了很多很多bug,所以在這裡進行一個階段性的總結。既是對過去問題的回顧和思考,也是把開發經驗記錄下來,以後真正能為我所用。

1.程式設計思想

1.高複用、低耦合:將一個複雜的業務流程分成一個個小的模組(函式),寫成一個個TODO,讓相應的類去實現,最後再像積木一樣拼起來。

2.不要過度封裝:在封裝時,不要封裝個性化的東西,滿足當前功能的同時還要滿足擴充套件性。只封裝多次重複使用的程式碼,不要為了封裝而封裝。

2.mysql資料庫

1.同一型別&含義的欄位要統一名稱,有利於開發。例如:退貨項、採購項、盤點項 欄位應該統一名稱叫做item。

2.造假資料時,要保證所有型別的假資料都涉及到,並且是多個,同時資料要容易識別,比如:姓名就填一個人名,不要填123

3.每張表必有的6個欄位:UUID、建立時間、修改時間 、建立人id、修改人id、備註。

4.把一張表的資料批量匯入另一張表中:

類別一:兩張表的欄位一致:INSERT INTO 目標表 SELECT * FROM 來源表;

類別二:表結構不同/只匯入指定欄位:INSERT INTO 目標表 (欄位1, 欄位2, ...) SELECT 欄位1, 欄位2, ... FROM 來源表;

5.涉及到資料庫的改動,一一記錄到sql包中的sql檔案中,sql檔案命名規則:2018120101_zjq_tablename_insert.sql

即日期和當日編號_作者_表名_操作.sql。

3.程式碼編寫

1.宣告類、函式時一定要寫註釋!包括但不僅限於:作者@author、日期@date、形參含義@param、返參含義@return、函式功能、作用範圍等。

2.宣告函式時,設定形參型別往"大"寫,使得函式有良好的擴充套件性。例如:當前函式只需要用到id,我們將整條資訊Record都傳進去,日後想要拓展功能時直接從Record裡取就可以了。共性核心方法+個性過載

3.要有一套統一、完整、規範的方法名,例如:增加為add(),修改為update(),刪除為delete(),查單個為findOne(),列表查詢為list(),分頁列表查詢為query(),批量的再在最前面加batch等等。

4.和前端約定的引數名一定要能夠“望文生義”,最重要的是不能只有部分含義!例如:庫存分門店庫存和倉庫庫存,一定要在最開始時就設定門店庫存id為store_stock_id,倉庫庫存為warehouse_stock_id。而我在最開始只用到門店庫存時用stock_id代表,後續兩個都用到時就不好區分了。

5.涉及到複雜的業務流程,要使得流程變得可配置:首先建一張流程資訊表儲存各個流程先後順序,寫一個ProcessConstants類來獲取各個流程先後順序,在相應的流程類中寫一個函式進行流程控制,通過識別不同的狀態引數(表示處於哪個階段)呼叫相應的函式(一個階段一個函式)。

6.hashMap和hashSet的使用區別:https://blog.csdn.net/Cary_1029/article/details/84558794

7.Array與ArrayList的使用區別:https://blog.csdn.net/Cary_1029/article/details/84500938

8.解決java.sql.SQLException: Incorrect string value: '\xAC\xED\x00\x05sr...' for column 'material_items'

   詳情請看:https://blog.csdn.net/Cary_1029/article/details/83959546

9.只在有可能為空的情況下判空,不可能為空的情況不需要判空!

10.涉及到欄位儲存json時,回顯給前端的資料統一為json字串轉成的json物件,前端返給後臺的統一為json物件。ps:在本次開發中,有好些地方沒統一,有的傳的是json物件,有的是從json物件中提出的陣列,給開發造成了不必要的麻煩。

11.字串拼接優先用StringBuilder(執行緒不安全,速度最快),其次是StringBuffer(執行緒安全,速度較慢)。

詳解請看:https://blog.csdn.net/Cary_1029/article/details/84712544

12.Token既可以基於Cookie實現,也可以基於Session實現。應用場景:登入驗證、單點登入、防止表單重複提交等等。

JFinal實現Token:https://blog.csdn.net/Cary_1029/article/details/84721470

13.阿里fastjson和谷歌net.sf.json的選擇與使用:在本專案中,我們使用的是fastjson,當然,現在大部分開發用的也是阿里的fastjson。所以我在這裡總結一下fastjson的常用方法:https://blog.csdn.net/Cary_1029/article/details/84720936

net.sf.json的使用可以參考這裡:http://www.cnblogs.com/wangzhengyu/p/9907917.html

14.JFinal Record<->Map :https://blog.csdn.net/Cary_1029/article/details/84721372
15.Java BigDecimal詳解:https://www.cnblogs.com/LeoBoy/p/6056394.html 

16.Tomcat啟動時將所有字典值讀取到記憶體中,存到一個Map裡。這樣使得後端新增字典值、前端獲取字典值特別方便。

具體樣例參考:本專案的ProcessConstants,ProcessConfigService,config.afterJFinalStart()。

下載成功/失敗:判斷流是否成功;下載檔案是否正確:比對檔案MD5碼(待做)

JFINAL不是IOC(待理解)

列印PDF(待做)

匯入匯出Excel(待做)

登入(待做)