周昱晨 羅向陽 張豪
摘 要: 針對雜志庫存管理問題,基于面向對象思想,運用設計模式設計了一個庫存管理系統(tǒng)。通過問題域部件設計,將系統(tǒng)劃分為人員管理、物資管理和收益管理三部分,并設計了相關表單;通過任務管理部件設計,運用單例模式實現(xiàn)了并發(fā)審核,運用觀察者模式保證了數(shù)據(jù)查詢的準確和實時,運用狀態(tài)模式實現(xiàn)了庫存的調取,運用裝飾器模式實現(xiàn)了收益統(tǒng)計,運用策略模式評估了來年印數(shù)與保留庫存數(shù);通過數(shù)據(jù)管理部件和人機交互部件設計,運用抽象工廠結合簡單工廠的模式實現(xiàn)了多數(shù)據(jù)源訪問支持;最后設計了用例進行測試。測試結果表明,該系統(tǒng)可以滿足雜志庫存管理的使用需求。
關鍵詞: 面向對象設計; 問題域部件; 任務管理部件; 數(shù)據(jù)管理部件; 人機交互部件; 設計模式
中圖分類號:TP311.5 文獻標志碼:A 文章編號:1006-8228(2018)09-33-04
Abstract: Aiming at the problem of inventory control of magazine, the object-oriented design pattern was used to design the inventory management system. In the design process of the problem domain components, the system was divided into 3 parts: personnel management, material management and earnings management, and business related forms were designed. In the design process of task management components, the singleton pattern was used to realize concurrent audit, the observer pattern was used to guarantee the accuracy and real-time of data query, the state pattern was used to realize inventory control, the decorator pattern was used to statistics of revenue and expenditure, the strategy pattern was used to evaluate the number of next year's printing and storage quantity. And in the design process of data management components and human interaction components, the abstract factory was used with the combination of the simple factory pattern to achieve the multiple data source access support. Finally, the use cases were designed and tested, and the results show that the system meets the needs of inventory management of magazine.
Key words: object-oriented design; problem domain components; task management components; data management components; human interaction components; design pattern
0 引言
倉儲管理日益受到重視,當前研究主要著眼兩方面:①優(yōu)化庫區(qū)、路徑等;②根據(jù)業(yè)務設計優(yōu)良的倉儲管理系統(tǒng)[1]。
倉儲管理系統(tǒng)應用廣泛。楊春紅[2]運用VB語言設計了快消品企業(yè)倉儲系統(tǒng),但其對模塊的實現(xiàn)敘述簡略;朱宇哲[3]等運用SSH框架設計了一個鋼廠庫存管理系統(tǒng),通過MVC模型實現(xiàn)了底層數(shù)據(jù)、中間業(yè)務邏輯、前端視圖的分離,但一方面作者運用的還是結構化設計思想,另一方面MVC不是一種設計模式,可看作多種模式的組合,雖然在系統(tǒng)層面實現(xiàn)了解耦,但在實現(xiàn)特定功能時解耦不如設計模式徹底。文獻[3]代表了當下庫存管理系統(tǒng)設計的主流思路,反映出設計思想和實現(xiàn)方法有創(chuàng)新和改進的空間。
面向對象思想使信息模型的表示與客觀實體相對應,符合人類的思維習慣,在軟件開發(fā)中應用廣泛。張瑋[4]對軟件工程中結構化方法與面向對象方法進行了比較,但沒有實例驗證;馮德虎[5]、徐帆[6]對面向對象分析與設計方法作了綜述,但文章偏重概念陳述而沒有對他人成果給出歸納,且文中的例子也只說明了對象建模技術(object modeling technology,OMT),不涉及設計模式;張宇等[7]論述了面向對象設計原則與設計模式之間的關系,但也沒有用實例驗證;周靜[8]運用Java實現(xiàn)了抽象工廠,卻只給出了代碼,實用性不強;雷金勇等[9]舉例說明了設計模式在暫態(tài)仿真中的應用,但沒有明確將面向對象4大部件設計與模式對應起來。
本文結合單位業(yè)務需求,運用面向對象思想完成系統(tǒng)開發(fā),并在部件設計過程中引入模式,通過用例來測試系統(tǒng)可行性。
1 面向對象設計原則及模式
1.1 設計原則
面向對象設計遵循開閉原則。以此為基礎,又衍生出了6大原則[10]。
⑴ 單一職責:一個類一個功能,提高模塊的內聚;
⑵ 迪米特法則:模塊間解耦;
⑶ 里氏替換:繼承原則,子類無縫代替父類;
⑷ 依賴倒置:①高層不依賴低層;②抽象不依賴實現(xiàn);
⑸ 接口隔離:單個復雜接口拆分為多個獨立接口;
⑹ 合成復用:用組合/聚合實現(xiàn)功能而不用繼承。
1.2 設計模式
1.2.1 創(chuàng)建型模式
⑴ 單例(Singleton):全局只要一個實例;
⑵ 原型(Protoype):通過拷貝原型而不實例化創(chuàng)建新對象;
⑶ 工廠(Factory):對象創(chuàng)建可控,隱藏具體類名實現(xiàn)解耦;
⑷ 抽象工廠(Abstract Factory):類根據(jù)需要返回不同對象,對象與屬性匹配;
⑸ 建造者(Build):生成對象與構造順序無關,對象實例邏輯在類外。
1.2.2 結構型模式
⑴ 適配器(Adapter):適配不同接口的類,方法各不同;
⑵ 裝配器(Dacorator):比繼承靈活,可組合形成多種擴展類;
⑶ 代理(Proxy):可用于身份驗證;
⑷ 外觀(Facade):對模塊封裝,給子系統(tǒng)接口;
⑸ 橋接(Bridge):抽象與實現(xiàn)分離;
⑹ 享元(Plyweight):相同對象重用,用于共享數(shù)據(jù);
⑺ 組合(Composite):整體與部分相同,通過對象訪問對象樹。
1.2.3 行為型模式
⑴ 策略(Strategy):不同方法在一個類中,可選擇;
⑵ 模板(Template):具有相同流程;
⑶ 觀察者(Observer):一對多關系,被觀察者變化時回調;
⑷ 迭代器(Iterator):內部實現(xiàn)無關的集合遍歷,順序訪問集合中各元素;
⑸ 責任鏈(Chain of Responsibility):多個類處理一個請求,不了解彼此功能,類間唯一聯(lián)系是互相傳遞請求,直到其中一個類處理;
⑹ 命令(Commond):特定操作的請求封裝到一個對象中,客戶端不了解實際執(zhí)行就產生請求;
⑺ 備忘錄(Memento):為對象提供存儲和恢復手段;
⑻ 狀態(tài)(State):對象表示程序狀態(tài),通過轉換對象狀態(tài)來轉換程序狀態(tài)。
⑼ 訪問者(Visitor):分離對象的數(shù)據(jù)和行為;
⑽ 解釋器(Interpreter):可用于純文本表達式執(zhí)行。
2 問題域部件設計
本系統(tǒng)將業(yè)務邏輯分為人員管理、庫存管理和收益管理三大部分。
人員管理即登記系統(tǒng)的操作員,需要創(chuàng)建:人員表(編號,姓名,手機)。
庫存管理主要分為入庫管理和出庫管理。出庫又分為發(fā)行和執(zhí)行訂單,故創(chuàng)建:庫存表(編號,年份,月份,庫存數(shù)量);發(fā)行表(編號,發(fā)行單位,年份,月份,數(shù)量);訂單表(編號,客戶姓名,年份,月份,數(shù)量)。
收益管理分為收入管理和支出管理。收入分為訂單收入和發(fā)行收入,支出分為發(fā)行運費和訂單運費,故建立:發(fā)行運費表(編號,發(fā)行單位,年份,月份,運費);訂單運費表(編號,客戶姓名,年份,月份,運費);訂單收益表(編號,客戶姓名,年份,月份,金額),發(fā)行收益表(編號,發(fā)行單位,年份,月份,金額)。
3 任務管理部件設計
3.1 人員管理
系統(tǒng)操作員注冊和登錄后可使用系統(tǒng)。由于本社人員不多且系統(tǒng)業(yè)務流程也不算復雜,為讓有人不在崗時流程依然可進行,故操作權限對所有成員放開。
3.2 庫存管理
3.2.1 單例模式
從系統(tǒng)業(yè)務邏輯可知,由于成員權限相同,需控制并發(fā)處理產生的沖突。單例模式全局只要一個實例,成員進入修改界面時生成Singleton類的實例,而Singleton類通過單例模式對生成實例數(shù)進行控制,當一個成員在修改庫存數(shù)時其他成員不能再進行修改。單例模式原理如圖1所示。
3.2.2 觀察者模式
本文將運用觀察者模式,通過引入一個數(shù)據(jù)庫代理作主體目標,系統(tǒng)操作員作為觀察者關注主體目標的狀態(tài)變化。當其中一個操作員查詢庫存時另一個操作員對庫存進行了修改,數(shù)據(jù)代理就會發(fā)出一個狀態(tài)變化通報給各個觀察者,確保實時性。數(shù)據(jù)庫代理不清楚系統(tǒng)有多少觀察者,它只在數(shù)據(jù)變化時通知所有正在查詢數(shù)據(jù)的觀察者,同樣各個觀察者只關注數(shù)據(jù)而不參與數(shù)據(jù)改變的細節(jié),可在對象間解耦,使得主體目標和觀察者都可自由改變,且因主體不關心觀察者,增加了重用性。觀察者模式邏輯圖如圖2所示。
3.2.3 狀態(tài)模式
通過業(yè)務邏輯分析可知,倉庫有入庫、空閑和出庫這三種狀態(tài)。當空閑時,庫存數(shù)沒有變化,故操作員只查數(shù)據(jù)不進行修改;進行出入庫操作時,要修改庫存數(shù)。入庫只在有新雜志送達后才進行,出庫在接到訂單或到達發(fā)行日時進行。
本文通過狀態(tài)模式將狀態(tài)間的轉換規(guī)則封裝到具體的類中,若以后本社的業(yè)務發(fā)生了變化,要修改轉換圖的轉換規(guī)則時,只需更改部分對應類中的狀態(tài)遷移規(guī)則就可以了,提高了代碼的可維護性。
狀態(tài)模式邏輯圖如圖3所示。
3.3 收益管理
3.3.1 裝飾器模式
裝飾器主要用來實現(xiàn)功能擴展,即降低了耦合也降低了系統(tǒng)復雜度。收益管理中有發(fā)行運費支出,訂單運費支出,發(fā)行收入和訂單收入。進行統(tǒng)計時,在發(fā)行運費支出的基礎上擴展發(fā)行收入可得發(fā)行收益,訂單收益亦然。裝飾器模式邏輯圖如圖4所示。
3.3.2 策略模式
本社每年底都要清理本年雜志,只保留一定數(shù)量作庫存,并確定來年印數(shù)。本文運用策略模式,將發(fā)行數(shù)和訂單數(shù)放在數(shù)量類中,將支出數(shù)與收入數(shù)放在金額類中。運用策略模式調用發(fā)行數(shù)與收入金額數(shù)可知發(fā)行數(shù)與收益關系,據(jù)此可大致估算來年印數(shù),以期不浪費;調用訂單數(shù)與收入金額數(shù)可知訂單數(shù)與收益關系,以此可估算保留庫存數(shù),以期收益最大化。 策略模式邏輯圖如圖5所示。
4 數(shù)據(jù)管理部件和人機交互部件設計
數(shù)據(jù)管理部件負責訪問數(shù)據(jù)庫,人機交互部件負客戶端展現(xiàn)。為減少需求變化造成系統(tǒng)修改的工作量,本文采用與簡單工廠模式相結合的抽象工廠模式,實現(xiàn)只有一個具體工廠類而有多個產品族。當業(yè)務邏輯發(fā)生變化時,只要修改相應產品類并對具體工廠類做少量的修改即可。由于前端、后臺邏輯近似,且JAVA中有特定的接口,限于篇幅圖表省略。
5 結束語
本文運用面向對象思想設計了一款雜志倉儲管理系統(tǒng),較文獻中主流的結構化設計方法思路上有所創(chuàng)新;在實現(xiàn)功能時運用了設計模式,既實現(xiàn)了解耦又提高了維護性。研究結果表明:該系統(tǒng)可滿足單位日常使用需求。
下一步,將進一步完善數(shù)據(jù)管理部件和人機交互部件,提升系統(tǒng)擴展性。
參考文獻(References):
[1] 沈捷.快消品企業(yè)倉儲管理系統(tǒng)的設計與實施[D].江西財經大學信息管理學院碩士學位論文,2017.
[2] 楊春紅.基于VB和Access的倉庫管理系統(tǒng)[J].電腦編程技巧與維護,2017.24:57-59
[3] 朱宇哲,李 奇.基于SSH框架的鋼廠庫存管理系統(tǒng)的分析和設計[J].工業(yè)控制計算機,2018.5:131-133
[4] 張 瑋.軟件工程中結構化方法與面向對象方法的比較研究[J].無線互聯(lián)科技,2017.21:52-53
[5] 馮德虎.面向對象分析與設計綜述[J].技術與市場,2011.18(5):122-122
[6] 徐 帆.面向對象開發(fā)方法綜述[J].重慶工商大學學報:自然科學版,2002.19(4):87-90
[7] 張宇,莊晉林.面向對象設計原則和設計模式的應用[J].華北水利水電大學學報:自然科學版,2007.28(1):63-65
[8] 周靜.JAVA設計模式之工廠方法模式的研究與應用[J].科技信息:科學教研,2007.20:90-91
[9] 雷金勇,李 鵬,于學軍,等.面向對象的設計模式在暫態(tài)仿真中的應用[J].電力系統(tǒng)及其自動化學報,2012.24(3):35-40
[10] GAMMA E著,李英軍譯.設計模式:可復用面向對象軟件的基礎[M].機械工業(yè)出版社,2007.