Rails 中的擴展

最近公司一個項目,需要將新網站接入美國總部的 ERP 系統,同時對流程做一部分的擴展。在這之中碰到的最大的問題,就是沒有舊系統的設計並不符合 ERP 的需求,而因爲要保證整個過程的無縫鏈接以及敏感數據的安全,對於數據庫的改動限制非常大。

同事 Daniel 負責這次的更新,我們對這個問題也討論過好多次,在 Rails 如何實現這樣的功能呢。最後選出了一種不破壞舊系統的結構,也不需要數據導入的方式。只在需要進行 ERP 擴展的對象上增加相應的字段,然後使用 Order 對象的子類 ERPOrder 進行封裝,將這個類傳遞到 ERP 系統代替原來的 order 對象。這樣下來,幾乎整個 ERP 的交互過程不需要做太大的改動,流程控制也變得簡單且清晰,狀態判斷以及異常處理也變得非常合理,代碼精簡不少。

對 ERPOrder 類的編碼中,深刻體會到 Ruby 語言的動態性帶來的便利。爲了避免這次的情況,能爲以後更新版本的系統提供兼容,我們將很多業務邏輯抽取出來,作爲 module mix in 到 erp 對象中。以後即使系統再次升級,也不用擔心是否會影響到 order 對象本身的業務邏輯以及數據驗證。

不過對於 Ruby 中的  module,mixin,include 機制還不是瞭解得很透徹,以後要多學習了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章