代碼内聯方式?不管你用什麼語言,在開發中大家總會抽出公用代碼庫,做為公司中各項目公共使用的内容,并且可能在大家的業績表現中會主動提到自己抽取了什麼公共代碼之類的可是當抽取不合理,或者架構不合理時,你會遇到本文描述的問題:小小的公用代碼,大大的耦合,我來為大家科普一下關于代碼内聯方式?以下内容希望對你有幫助!
代碼内聯方式
不管你用什麼語言,在開發中大家總會抽出公用代碼庫,做為公司中各項目公共使用的内容,并且可能在大家的業績表現中會主動提到自己抽取了什麼公共代碼之類的。可是當抽取不合理,或者架構不合理時,你會遇到本文描述的問題:小小的公用代碼,大大的耦合!
樓主所有的部門,前任leader在考慮做服務化時,把本部門的基礎代碼拆分為了三分部:
-
vendor:yii2框架及其他第三方開源類庫,依賴composer管理
-
companyLibrary: 公用代碼庫
-
project: 項目業務代碼
其中vendor存放在一個git項目中,裡面通過composer管理依賴,主要是YII2框架和Phpoffice,jpgraph等等組件。
companyLibrary是另外一個git項目,裡面存放的是公用的助手類(文件處理、日志處理、圖像處理、郵件等),公司其他服務項目請求類(比如我在A事業部,我們有10個項目,可能都會去調用B事業部的xxx服務,那麼會把這個調用邏輯放在公用代碼庫裡面),各種基類(控制器,Action, Service, Model)。
project是每個項目一個單獨的git,存放的是項目自己的業務邏輯代碼。
最後上線的腳本是從三個git拉代碼合并。一開始隻有兩三個項目公用companyLibrary,vendor還好,當項目變成五個,十個的時候,這個時候有一天,我們在vendor裡面添加了一個新的第三方庫,順便執行了下composer update,Yii2升級了一個版本,就這樣,誰也沒想到一個小小的版本升級,從2.0.12升級到2.0.13而已,最後卻導緻了線上事故。原因是YII2為了兼容PHP7.2,廢棄了Object類,改名 BaseObject,并且增加了抽象方法。
後面你發現companyLibrary裡面的某個方法實現不夠好,或者存在隐藏的BUG,你卻不敢修複了。
不合理的代碼抽象和公用導緻了災難。要公用的代碼一定是基礎的助手類等,并且公用代碼的複用應該是每個項目單獨一個拷貝,可以單獨改變和獨立發展。
,