架構的坑系列 重構過程中的過度設計

2022-08-28 11:48:12 字數 1966 閱讀 5739

軟體架構

2016-06-03 08:47:02 發布

您的評價:

5.0收藏     2收藏

在說之前先聊聊架構師這個職位吧,這個職位最近兩年特別特別火,哪個公司沒個架構師好像都不好意思跟人打招呼,各位架構師打上這個標籤後頭上就頂了乙個光環了,本人也認識各個公司的一些架構師,我認識的架構師分成幾種:

最近還有一種說法就是架構師到底要不要會寫**?我的理解是 沒什麼可說的,必須要會寫啊 ,你乙個架構師,**都不會寫還架構個屁啊,就算你是ppt架構師,沒時間寫**,但出問題了掄起袖子來解bug的能力得有吧,而且很關鍵的一點,架構師面對的都是一群技術宅,你連個**都不會寫,你覺得下面的技術宅會看得起你麼?至少你得顯得很會寫吧。 為什麼說架構師呢?因為大部分架構上的坑都是從乙個不好的設計開始的,而現在的各個系統的設計都是由架構師來操刀的。

每當客戶有新需求,基本的操作就是 加個表 --- 加個邏輯模組 --- 修改一下介面 --- 上線 ,而且一般oa系統是部署在客戶內部的,所以每次修改都是針對單獨客戶進行開發。 公司發展的越來越好,有了一些大公司買了他們的oa,有錢了,請了個架構師過來優化優化技術架構,架構師叫小明(每次都黑小明),小明來了一看現有設計,我去,這怎麼行?三天後,給出了他的建議

於是,整個系統變成下面這個樣子了。

臥槽,好高大上,乍一看,這就是乙個目前比較流行的架構圖了,有資料層,有中介軟體層,有業務層,有前端展示層,資料層支援分庫分表,可以無限擴充套件,業務層微服務化,也可以無限擴充套件,docker部署,乙個image搞定部署,簡直了!除了訊息佇列沒有用上以外,其他的流行東西用了個遍啊。 那麼,開始幹吧,把人員分成兩撥,一撥繼續維護現有系統,接客戶新需求,一撥開始重構,乙個月時間,把資料和功能模組梳理了一遍,然後開始定各個服務中的介面,又用了小乙個月,然後全部人員投入進去開始編碼,又忙活了三個月,終於重構完成了,再花乙個月時間追上這4個月新來的需求,牛逼的架構上線了! 如果小明夠厲害並且開發人員也給力的話,最好的情況就是上線後一切正常,你不是重構麼?客戶完全感覺不到有變化,繼續使用得很high。但這種概率幾乎為零,最有可能的情況是什麼呢?

這就是乙個典型的 過度設計 , 過度設計 特點:

完全脫離了業務場景來進行技術架構的設計就是過度設計 。

這個例子中的業務場景是乙個oa系統,oa系統的主要資料是企業的人和人的資料,乙個企業能有多少人?乙個初創公司,能接入10萬人的大公司做oa已經非常不錯了吧?即便是10萬人的大公司,人的資料也就10萬條,我們在成100,算單個表1000萬條資料吧,單台mysql完全可以hold得住,所以第一條分庫分表的設計在這個場景下就完全沒有必要,企業主最關心的是什麼?是資料的安全可靠,所以你在這裡把mysql換成orecle,企業主覺得安全也會買單,並且你收入還能更多,而且換成orecle的話,單個表上億問題也不大,何必分庫分表? 好,就算你資料量巨大,需要分庫分表,那你整個中介軟體幹嘛?中介軟體的作用是遮蔽底層資料沒錯,但還有個場景是資料讀寫分離,一般是在大資料量並且有高併發需求的系統使用,你一oa系統,能有多高的併發?需要用中介軟體這麼高階的東西麼? 再看看 微服務 ,為了降低系統的耦合度使用了 微服務 ,同樣場景也不對,什麼時候需要把服務拆分出來呢?只有在當前服務已經耗費了單台機器太多的資源了,單機扛不住了,才會把功能比較獨立的模組拆分成微服務出去,因為 微服務 雖然降低了系統的耦合度,但是需要更多的考慮到系統的可用性和網路因素造成的問題,對開發人員的要求更高,乙個oa系統,能有多大的計算量? 後面的前後端分離啊,docker部署啊,你想想各自的必要程度如何?乙個oa是否需要絢麗的介面?乙個oa系統的更新頻率有多高?是否需要docker這樣的東西來幫助部署?成本如何?再看看是否是 過度設計 ? 最後,我覺得上面這個系統,比較合理的修改設計是:

我覺得重構得滿足以下幾個條件的大部分,才有重構的必要,第乙個條件是必須滿足的。

而重構最忌諱的用以下理由來重構系統

坑系列 重構過程中的過度設計

這一篇,我們從重構這個場景來看看系統架構的設計中過度設計這個坑。首先,我們這裡說的重構,和 重構 改善既有 的設計 這本書中的重構不太一樣,這是本好書,他主要說的是 級別的重構,這種重構是需要在編碼的時候時時刻刻進行的,更多的是一種程式設計思想的訓練,而我們這篇的重構主要是說系統設計的重構。在說之前...

使用jquery過程中遇到的坑

最近在使用jquery過程中發現了幾個小問題,不知道有沒有其他人遇到。問題一 假的dom結構,比如input的乙個選中狀態,用jquery中的attr 進行新增和刪除,在google除錯中看到是正常的,但是傳給後台的值是不對的。我找了很久才發現原因,我的dom結構是假的。只是表面上看起來好像刪除掉了...

MySQL 安裝過程中的坑

1.問題 did not find path c windows system32 api ms win crt runtime l1 1 0.dll 安裝vc 2015的時候會報這個錯誤 windows缺少更新包 先安裝 windows8.1 kb2919355 x64 再安裝windows8.1...