大學(xué)的時(shí)候無(wú)意看到這么一句話(huà),宛如醍醐灌頂,以前恍惚中寫(xiě)下的代碼瞬間清晰了起來(lái)。
這句話(huà)包含兩個(gè)要素,一個(gè)是軟件工程,一個(gè)是中間層
什么是軟件工程?在我看來(lái)需要寫(xiě)代碼的或多或少都有軟件工程的要素。
小到hello world,大到搜索引擎,都是軟件工程。
而類(lèi)似于登月計(jì)劃、強(qiáng)子對(duì)撞、基因模擬這類(lèi)規(guī)模非常龐大的項(xiàng)目,軟件工程只是其中一個(gè)小塊,但也可以用中間層來(lái)解決問(wèn)題
于是中間層又是什么呢?我總結(jié)為連接兩個(gè)事物的事物。
比如兩個(gè)模塊A和B,之間數(shù)據(jù)結(jié)構(gòu)不互通,一個(gè)接收json,一個(gè)接收protobuf,這時(shí)候就需要一個(gè)模塊C,將A的json轉(zhuǎn)為protobuf傳給B,將B的protobuf轉(zhuǎn)為json傳給A。
而模塊B就可看作一個(gè)中間層
再往大了看,一個(gè)http請(qǐng)求,是將服務(wù)器里的數(shù)據(jù)與顯示器相連接,兩者之間本身是不能互通的,請(qǐng)求經(jīng)過(guò)了用戶(hù)區(qū)、內(nèi)核區(qū)、網(wǎng)卡、網(wǎng)線(xiàn)、交換機(jī)、路由器、nginx、應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)驅(qū)動(dòng)等等中間層才訪(fǎng)問(wèn)到了數(shù)據(jù)庫(kù),然后再一層一層的將數(shù)據(jù)返回到顯示器。
再往大了看,你看上一個(gè)妹子的時(shí)候,是不是通常苦于對(duì)妹子一無(wú)所知,無(wú)從下手,于是先找個(gè)你和妹子都認(rèn)識(shí)的中間層來(lái)溝通傳遞消息?