成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說(shuō)了你還不信,業(yè)務(wù)代碼,真的不能用公共庫(kù)!

開發(fā) 架構(gòu)
個(gè)性業(yè)務(wù)代碼上浮,共性業(yè)務(wù)代碼服務(wù)化下沉,只是一個(gè)很小的優(yōu)化點(diǎn),但對(duì)于公共庫(kù)解耦卻是非常的有效。

什么是耦合?

耦合,是架構(gòu)中,本來(lái)不相干的代碼、模塊、服務(wù)、系統(tǒng)因?yàn)槟承┰蚵?lián)系在一起,各自獨(dú)立性差,影響則相互影響,變動(dòng)則相互變動(dòng)的一種架構(gòu)狀態(tài)。

感官上,怎么發(fā)現(xiàn)系統(tǒng)中的耦合?

作為技術(shù)人,每每在心中怒罵:

  • “這個(gè)東西TM跟我有什么關(guān)系?“
  • ”明明你的需求,憑啥需要我來(lái)配合?”

明明不應(yīng)該聯(lián)動(dòng),卻要被動(dòng)配合,就可能有潛在的耦合。

因?yàn)楣矌?kù),導(dǎo)致上下游必須聯(lián)動(dòng),就是一個(gè)耦合的典型案例。

場(chǎng)景還原

一個(gè)看似“公共”的業(yè)務(wù)庫(kù)(*.so *.jar *.dll *.php),很多業(yè)務(wù)系統(tǒng)都依賴于這個(gè)公共庫(kù),這個(gè)庫(kù)使得這些系統(tǒng)都耦合在了一起。

畫外音:這里的公共庫(kù)不是指像“字符串操作”這樣的不變化的工具庫(kù),更多是指通用業(yè)務(wù)的公共庫(kù)。

耦合如何導(dǎo)致相互影響?

業(yè)務(wù)1,業(yè)務(wù)2,業(yè)務(wù)3都依賴于某一個(gè)biz.jar,業(yè)務(wù)1因?yàn)槟硞€(gè)需求需要升級(jí)biz.jar。上線前,業(yè)務(wù)1的QA進(jìn)行了大量的測(cè)試,確保無(wú)誤后,代碼發(fā)布,發(fā)布完線上驗(yàn)證無(wú)誤后,上線完成,閃人。

突然,bug群里有人反饋,業(yè)務(wù)2的系統(tǒng)掛了,業(yè)務(wù)3的系統(tǒng)也掛了,一下炸開了鍋:

  • 業(yè)務(wù)2的大boss首先發(fā)飆:“技術(shù)都干啥了,怎么系統(tǒng)掛了”;
  • 業(yè)務(wù)2的rd一臉無(wú)辜:“業(yè)務(wù)1上線了,所以我們掛了”;

額,然而,這個(gè)理由,好像在大boss那解釋不通…

  • 業(yè)務(wù)2的大boss:“業(yè)務(wù)1上線?業(yè)務(wù)1上線前測(cè)試了么”;
  • 業(yè)務(wù)1的qa自信滿滿:“測(cè)試了呀,上線前上線后都驗(yàn)證了,沒(méi)問(wèn)題呀”;
  • 業(yè)務(wù)2的大boss對(duì)業(yè)務(wù)2的rd吼道“還想甩鍋,拖出去祭天”;

不知道大家工作中會(huì)不會(huì)遇到這樣的場(chǎng)景,因?yàn)楣矌?kù)的耦合,兄弟部門上線,影響的確是你,此時(shí)你心里可能就在罵娘了,這幫不靠譜的**隊(duì)友。

特別的,如果公共庫(kù)的使用方很廣,這個(gè)耦合很嚴(yán)重,可能影響很大的范圍。

如何解除公共庫(kù)耦合?

方案一:代碼拷貝一份。

別嘲笑這個(gè)方案,誰(shuí)敢說(shuō)自己寫代碼的時(shí)候沒(méi)這么干過(guò)?

我們都知道這不是一個(gè)好的方案,但不可否認(rèn),拷貝之后,代碼各自演化,一個(gè)地方升級(jí)出錯(cuò),只影響一方,拷貝方只要不動(dòng)原有代碼,至少是不會(huì)受影響的。

代碼拷貝缺點(diǎn)很多,系統(tǒng)拆分時(shí),萬(wàn)不得已不要使用這個(gè)方案。

方案二:垂直拆分,將公共庫(kù)里業(yè)務(wù)個(gè)性化的代碼拆到調(diào)用方去,不要放在公共庫(kù)里。

需要把業(yè)務(wù)個(gè)性的代碼拆分到各個(gè)業(yè)務(wù)線自己的工程,自己的業(yè)務(wù)庫(kù)里去,例如s1.jar / s2.jar / s3.jar,修改各自的代碼,至少不會(huì)擴(kuò)大影響范圍。

大家為什么都把代碼往一個(gè)公共庫(kù)里塞?

很多時(shí)候,因?yàn)槎栊裕稽c(diǎn)一點(diǎn)的惰性,日積月累,終成大坑。

這個(gè)垂直拆分是一個(gè)架構(gòu)重構(gòu)的過(guò)程,需要各業(yè)務(wù)方配合。

方案三:服務(wù)化,將公共庫(kù)里通用業(yè)務(wù)代碼拆到下層去。

完成了第一步,業(yè)務(wù)個(gè)性化的代碼提取到業(yè)務(wù)側(cè)上游。

接下來(lái)是第二步,業(yè)務(wù)通用的代碼,下沉抽取一層服務(wù),服務(wù)對(duì)上游提供RPC接口:

  • 每次修改底層接口,需要測(cè)試接口的兼容性,保證不影響舊調(diào)用方;
  • 如果是新的業(yè)務(wù),則建議新增接口;

最終,達(dá)到通過(guò)服務(wù)RPC調(diào)用的方式來(lái)解除耦合。

個(gè)性業(yè)務(wù)代碼上浮,共性業(yè)務(wù)代碼服務(wù)化下沉,只是一個(gè)很小的優(yōu)化點(diǎn),但對(duì)于公共庫(kù)解耦卻是非常的有效。

知其然,知其所以然。

思路比結(jié)論更重要。

責(zé)任編輯:趙寧寧 來(lái)源: 架構(gòu)師之路
相關(guān)推薦

2020-03-10 08:33:04

HTTP演變協(xié)議

2015-07-06 09:35:01

編程音樂(lè)

2019-12-19 09:08:42

HTTP瀏覽器緩存

2023-06-07 08:00:00

MySQL批量插入

2014-05-21 09:51:46

JavaFXJava8

2023-09-14 13:23:42

Llama-2模型參數(shù)

2009-08-14 09:10:46

惠普高管IT應(yīng)用云計(jì)算

2011-07-01 09:24:06

關(guān)鍵業(yè)務(wù)Unix服務(wù)器

2017-10-18 22:01:12

2021-05-13 10:40:16

ThreadLocal代碼Java

2018-09-02 15:43:56

Python代碼編程語(yǔ)言

2012-07-11 13:35:53

代碼

2021-07-23 16:30:36

PythonC++代碼

2024-08-12 12:25:25

SpringMVC開發(fā)

2012-11-08 16:16:41

Linux開源軟件

2012-06-14 09:27:07

免費(fèi)WIFIWIFI

2021-05-18 12:35:00

Divdom產(chǎn)品經(jīng)理

2018-09-03 16:05:03

編程語(yǔ)言Python代碼技巧

2015-03-06 09:47:53

小米變化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人黄色电影在线播放 | 亚洲成人一区二区三区 | 性欧美精品一区二区三区在线播放 | 国产精品久久久久久中文字 | 国产99久久精品一区二区永久免费 | 国产亚洲一区二区三区 | 亚洲国产一区二区在线 | 欧美亚洲视频在线观看 | 亚洲综合色婷婷 | 日韩一区二区在线免费观看 | 日韩欧美二区 | 日本成人中文字幕 | 成人福利在线观看 | 成人免费视频在线观看 | 久久新视频| 欧美一区2区三区4区公司 | 91在线看 | 欧美一区二区在线 | 国产日韩一区二区三区 | 99在线资源| 国产小u女发育末成年 | 欧洲精品在线观看 | 精品一区二区三区电影 | japanhd成人 | 你懂的av| 精品亚洲一区二区三区 | 成人亚洲视频 | 精品久久久久久久 | 天天操天天天干 | 天天天操天天天干 | 精品久久久久一区 | 亚洲精品中文字幕 | 在线黄 | 精品久久国产 | 国产日韩欧美在线一区 | www操操| 波多野结衣一区二区三区 | 自拍偷拍欧美 | 少妇性l交大片免费一 | 精品三级 | 欧美视频免费在线观看 |