自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

明明服務化了,為啥耦合更加嚴重了?

開發(fā) 開發(fā)工具 架構(gòu)
耦合,是架構(gòu)中,本來不相干的代碼、模塊、服務、系統(tǒng)因為某些原因聯(lián)系在一起,各自獨立性差,影響則相互影響,變動則相互變動的一種架構(gòu)狀態(tài)。

什么是耦合?

耦合,是架構(gòu)中,本來不相干的代碼、模塊、服務、系統(tǒng)因為某些原因聯(lián)系在一起,各自獨立性差,影響則相互影響,變動則相互變動的一種架構(gòu)狀態(tài)。

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

作為技術(shù)人,每每在心中罵上下游,罵兄弟部門,“這個東西跟我有什么關(guān)系?為什么需要我來配合做這個事情?”。明明不應該聯(lián)動,卻要被動配合,就可能有潛在的耦合。

但如果服務化不合理,將部分個性化業(yè)務下沉到了底層,就是一個耦合的典型案例。

場景還原

業(yè)務1,業(yè)務2,業(yè)務3,因為join導致數(shù)據(jù)庫實例耦合在了一起。

為了實現(xiàn)通用數(shù)據(jù)庫table-user的解耦,實施了服務化,將通用user數(shù)據(jù)的訪問抽象出了服務。

由于服務化不合理,會有很少很少的個性化業(yè)務邏輯,實現(xiàn)在底層的服務中,典型的偽代碼是:

  1. switch(biz_type){ 
  2.  case(1) : exec_logic1(); 
  3.  case(2) : exec_logic2(); 
  4.  case(3) : exec_logic3(); 
  5.  default : exec_default(); 

為什么會引發(fā)耦合呢?

不妨設(shè),業(yè)務1來了一個新的個性化需求,這個需求本來實現(xiàn)在業(yè)務1自己的代碼里是合理的,但工程師S想到,底層的通用服務里也有業(yè)務1的一小撮個性化代碼,評估后,發(fā)現(xiàn)實現(xiàn)在底層新的需求改動的代碼最小,時間最短,于是來找底層服務的負責人工程師B。

- 業(yè)務1工程師S:“有個小需求,幫個忙唄”

- 底層工程師B:“個性化實現(xiàn)在底層不合理”

- 業(yè)務1工程師S:“反正都有switch case的代碼了,再改一點也不麻煩,在我這邊實現(xiàn)特別復雜,要xxoo這么搞”

- 底層工程師B:“確實很復雜,那我來吧”-

- …

遺留了不合理的代碼,就會有第一次妥協(xié),妥協(xié)了業(yè)務1,就會妥協(xié)業(yè)務2,隨著時間的推移,底層服務越來越復雜:

  • 業(yè)務1,業(yè)務2,業(yè)務3的個性化代碼越來越多;
  • 業(yè)務1,業(yè)務2,業(yè)務3的需求越來越多提給底層工程師;
  • 底層工程師慢慢成了項目瓶頸,業(yè)務1,業(yè)務2,業(yè)務3的項目逐步delay,但逐步都怪到了底層工程師的頭上;

直到有一天,底層服務出了一個小bug,影響了業(yè)務1,業(yè)務2,業(yè)務3,歷史總是驚人的相似:

- 業(yè)務1的大boss在群里首先發(fā)飆:“技術(shù)都干啥了,怎么系統(tǒng)掛了”

- 業(yè)務1的工程師S一臉無辜:“底層系統(tǒng)改造,工程師S的bug”

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

- 底層服務工程師B一臉委屈:“...”。明明需求是業(yè)務方的,為什么修改代碼的是我底層呢,業(yè)務代碼出了問題,為什么責怪的是我底層呢,每每心中罵娘,系統(tǒng)中很可能就存在耦合。

如何解耦呢?

業(yè)務代碼上浮,通用代碼下沉,服務化徹底。

解決方案并不復雜,分層架構(gòu)中,每一層都有自己的職責,每一層都應該守住自己的底線。

你在做技術(shù)方案時,碰到過這種場景嗎?

  • “放在你那邊做代碼少”
  • “放在你那邊做時間短”

作為設(shè)計折衷的理由,而要多問:

  • “怎么做合理”

業(yè)務代碼上浮,通用代碼下沉,服務化徹底,只是一個很小的優(yōu)化點,但對于底層服務解耦卻是非常的有效。

希望大家每天收獲一點點,這樣架構(gòu)就能美好一點點。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文 

 

 

責任編輯:趙寧寧 來源: 51CTO專欄
點贊
收藏

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