天天看點

業務重構

在重構一個結構繁雜,代碼邏輯千絲萬縷的業務系統時,除了對代碼層面的重構之外,很多人會忽視對于業務結構的重構和簡化。

目前正在遭遇着這個事情,一個異常複雜的系統,不斷的在上面添加需求,代碼量增大,函數的體積也在增長,Web服務也越來越臃腫。關于代碼層面的解耦,方法論很多,但本質上就是“提取公因式”,即相同的代碼不要寫兩遍。通常,良好子產品的子產品設計,很容易達成這種隻寫一次的目标。

還有的複雜度就是子產品之間的依賴和調用,很多人就會想到,用消息隊列去解耦。其實消息隊列解耦隻是在技術層面,把兩個東西實體上分開了,邏輯上還是要靠消息去驅動,複雜點就變成了何時發消息,發怎麼樣的消息。過于複雜的依賴和調用,在修改的時候,容易出現纰漏,比如漏發了某個消息。

其實我想說的不是技術層面的簡化,而是業務層面的簡化。業務人員首先要扪心自問一下,業務真的有必要設計的那麼複雜嗎?真的需要嗎?如果你覺得需要的話,那你再想一遍,真的需要嗎?

有一些業務人員過度設計,複雜設計,盲目設計,本來簡單的一個業務規則,硬是要設計成很複雜的規則,設計出很複雜的一個功能,但是該功能的使用率很低,但是對于這個功能的維護成本又很大,一不小心出的bug就是由它産生。

理論上,業務設計和程式設計并沒有差別,無非一個是用自然語言描述,一個用代碼表述。業務設計也是可以畫出流程圖,狀态圖的。但是,如果一個業務設計天生就複雜,那麼指望代碼層面上很簡潔,很清晰,無異于癡人說夢。