從0設計開發一個進銷存系統的實踐經驗總結

最近在開發一家外貿公司的進銷存系統,小微企業,年銷售額在百萬左右,這是我第一次開發進銷存系統,沒有相關經驗的我以爲這套系統並不會那麼複雜,但實際上它的複雜性被大大低估了。前端

爲何複雜?

偏偏就是這種外貿的小微企業,小訂單會特別多,天天幾乎都有數十單,一個訂單裏面可能會有幾十個型號,總金額從幾十到上萬的都有,銷售商品包括幾十種大類,500多種型號,客戶更多達500+,可想而知以前用excel管理起來有多困難,說實在點,原來可能就沒辦法管理或沒管理,因此迫切地但願能有一套系統來把各個資源要素整合起來進行統一的規範化管理。數據庫

這家企業的負責人告訴我,他們用過好幾家現成的系統,都難以達到他們理想的效果,歸根結底仍是與他們業務不夠契合。編程

爲何會這樣?大部分軟件公司的銷售通常作法都是拿自家產品去套客戶需求,套住一個是一個,這種作法每每就沒辦法知足個性化的業務須要

我是如何開始的?

大天朝中醫博大精深,借用其綱領,就是「望聞問切」,在系統開發上也同樣適用。後端

「望」:親自看,看看企業到底什麼規模,人員有多少,組織架構是什麼,有沒有已經使用的系統或工具?看看他們天天都在幹什麼。固然,前提是你有這個機會去到企業。架構

「聞」:多傾聽,傾聽企業負責人的想法,傾聽管理人員和員工等各個層面的需求,傾聽不是一味地接納,一個有經驗的開發者是能甄別出哪些是真需求,哪些是僞需求的,若是你沒有相關經驗,那麼在後續要進行調整。框架

「問」:善溝通,首先要確認企業的表明也就是對接人,這一點很是的重要!全部的問題都與對接人溝通,此人必定要對該企業的核心業務很是瞭解,並且系統的建設全權由此人負責,結合望、切、聞綜合分析,與對接人進行系統開發方面的溝通。模塊化

「切」:多實踐,好的產品在於不斷的打磨,任何系統毫不可能一步到位,每每功能在設計與實際使用中的差異會很大,對於像我這樣第一次開發這種系統沒少進行重構,若是功能沒有達到企業要求,或者不夠完善,果斷進行重構,否則程序的代碼只會變得愈來愈臃腫,改動的代價愈來愈高。工具

這四種方法沒有絕對的前後順序,在項目的實施過程當中不斷的穿插進行。性能


如今系統基本已經開發完成投入實際生產了,這裏就以我目前碰到的實際問題來講一下進銷存系統複雜在哪裏。設計

首先說明一下這裏的複雜不一樣於面向大衆消費端的應用,因爲用戶數量侷限在企業內部,因此我這裏暫時尚未碰到性能問題。
這種系統的複雜度分爲兩大方面:業務和數據


業務

要設計一個業務契合度高的系統就要把該企業的業務瞭解的儘量的全面和透徹,小微企業的業務流程通常都比較雜亂和靈活,首先要作的就是要把流程固化下來,起初並無直接與該企業探討具體的功能實現,而是把他們全部的業務流程按照系統功能劃分紅了六大模塊作成了excel表格,而後與對接人溝通,看看這六大模塊是否能涵蓋全部的業務流程。

肯定了模塊後,進一步確認模塊下的具體功能,詳細瞭解該功能應知足什麼樣的業務場景,業務流程是如何運轉的等。

這裏經過訂單管理來簡單的說明一下,基本的訂單管理都有新建、修改、刪除的功能,訂單中會涉及到商品、數量、與金額,好比新建的訂單商品要不要出庫,是新建訂單時直接出庫仍是須要主管審覈後再出庫?訂單什麼狀況下能夠修改,若是修改了該訂單中已經出庫的商品,是否須要做廢該訂單中這個商品,若是做廢還要恢復做廢商品的庫存等等。

相似這樣的業務需求會有不少,在確認功能時最好能窮盡每個需求項。


上面提到的這種業務需求在實際開發中不可避免,後期也會不斷的冒出來,當合理的需求出現時,就要有一套行之有效的方法來儘量快速和便捷地響應企業需求。

  • 首先一個靠譜的後端MVC框架必不可少,不刻意追求最新的技術,但要帶有一些基本功能,如權限與菜單控制功能,能節省很多的初始化和重複工做量,同時MVC的方式也能讓業務邏輯在編程時更加的清晰。
  • 使用模塊化開發,同時儘可能避免模塊間的相互依賴。剝離出相似於getGoods(獲取商品信息)這種須要常常複用的function,更易於將來的功能擴展。
  • 前端也須要一套組件豐富的框架,這樣能夠儘量的複用組件與樣式(此次沒用VUE是個遺憾,我以爲VUE應該挺適合構建進銷存系統,但願這裏有用過的同窗能交流一下心得),同時能保證系統風格的一致。
  • 數據庫的表設計要得當,不要爲了圖省事把全部須要用到的數據都塞到一個表中,好比訂單表中不必保存商品的價格、名稱、種類等信息,應該使用視圖或子查詢的方式來獲取數據,這樣在信息獲取上就有比較大的靈活性,也更加有利於表的複用。

數據

說一下另一點比較複雜,也是比較頭疼的地方,數據。

進銷存系統開發的一大特色就是圍繞數據的準確性展開。以前開發過不少其它各類各樣的業務系統,但都沒有比進銷存對數據的準確要求的那麼嚴格,進銷存系統因爲其對數據的特殊敏感性,原則上是不讓業務員修改數據的,並且也不易修改,由於數據與數據之間的關聯性太強,改了一處,與此關聯的各處都須要進行修正,但每每一我的並不具有全部的修改權限,因此就須要確保各處數據的一致與準確性。

在對進銷存的操做流程進行分解後,通常都會有如下幾個步驟:

  1. 錄入商品A(A=0)
  2. 採購商品A(A+10?)
  3. 入庫商品A(A=10)
  4. 銷售商品A(A-10?)
  5. 出庫商品A(A=0)
  6. 盤點商品A(A=?)

舉了一個簡單的例子,也因而可知商品是進銷存系統很重要的一塊內容,其中要作的就是對商品的數量進行運算。
這裏面的數學模型並不複雜,可是當有幾百個商品,數量翻幾十倍時,再加上外貿要換算匯率,手續費等,不管是商品數量仍是金額,計算的過程就會比較複雜,會發現腦子徹底不夠用,尤爲是出錯的時候,找半天才找到出錯的環節,算到最後每每都是邏輯出錯,而不是數學模型的錯誤。

因此個人經驗是,當面對一個繁雜的業務時,每每要通過冗長的系統流程,在處理時,儘可能的能把它的處理過程拆分紅多個function,讓每一部分的function確保它只幹一件事,只要把這件事作的準確就能夠了。

總結

用「望聞問切」的方式充分了解需求,經過切合自身實際的方法快速響應,以精益求精的態度不斷改善系統,確保數據的一致性和準確性。

相關文章
相關標籤/搜索