代码内联方式(公用代码偶合之痛)

不管你用什么语言,在开发中大家总会抽出公用代码库,做为公司中各项目公共使用的内容,并且可能在大家的业绩表现中会主动提到自己抽取了什么公共代码之类的可是当抽取不合理,或者架构不合理时,你会遇到本文描述的问题:小小的公用代码,大大的耦合,我来为大家科普一下关于代码内联方式?以下内容希望对你有帮助!

代码内联方式(公用代码偶合之痛)

代码内联方式

不管你用什么语言,在开发中大家总会抽出公用代码库,做为公司中各项目公共使用的内容,并且可能在大家的业绩表现中会主动提到自己抽取了什么公共代码之类的。可是当抽取不合理,或者架构不合理时,你会遇到本文描述的问题:小小的公用代码,大大的耦合!

楼主所有的部门,前任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,你却不敢修复了。

不合理的代码抽象和公用导致了灾难。要公用的代码一定是基础的助手类等,并且公用代码的复用应该是每个项目单独一个拷贝,可以单独改变和独立发展。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页