庫,框架,架構,平台,有什麼明確的區別?


庫是工具箱。

比如宜家買個便宜的架子,自己裝,螺絲刀擰的手痛,就買了個電動螺絲刀,生產力立馬躍遷好幾倍。螺絲刀,電動螺絲刀,就是不同的庫,雖然用法不同,API不同,但想換就換了,改動不大。

框架是一套通用的解決方案。

比如剛才買的架子,可以放書,可以放花,可以放DVD。也可以個性化,有的地方裝上門,裝抽屜,但是,它還是個架子,不能在上面睡覺。

對應軟體框架來說,通常針對某類典型問題,預先規定好在什麼地方做什麼事情,不好僭越。更換框架,也是麻煩,就像架子一樣,之前裝的門,抽屜都要丟掉,架子里東西也要遷移,重新安置。

架構是高度抽象的需求,是系統中的不變數。

比如架子裝好了,要有個房子放。買房子,房型圖就是架構,這屋書房,那屋睡覺,二人世界,70平搞定!裝修,北歐風,中國風,都可以;打通牆,換馬桶,也行,但承重牆不能動,70平不會多,這就是架構。

開心的住了一年,懷孕了,三胞胎,噗噗噗,生了,婆婆岳母都來了,烏壓壓的一屋人,晚上客廳里睡倒一片,書房改膠囊旅店也塞不下了,怎麼辦?沒辦法!架構在那裡,需求的發展超出了架構師的想像,只能認慫,有錢就買新房,換架構,沒錢就受著,誰讓你當初低估生殖力呢?

平台是所有可能做的事的集合。

比如帶著三胞胎搬進了新小區。想溜娃,去小區的滑梯;想運動,去小區的健身角;想游泳,物業說,不好意思,咱是中檔小區,大哥你出門,打車,奧體。

在家裡,小區就是平台,你能做的受限於小區的設施。同樣,網頁上,js操作 dom,風生水起,但想要隨意動硬碟里的文件,就困難了,因為它跑在瀏覽器里,瀏覽器是平台,有所限制。如果js跑另一個平台上,操作文件也不是大問題。微信之於小程序,瀏覽器之於前端,JVM之於Java,皆是平台,既提供了服務,也限制了可能。

具體到實際操作,平台不需太費腦筋,沒多少可選;架構比較考驗人,設計的不好以後就被虐;框架看團隊偏好,一般選熟悉的;庫自己選順手的即可。

總之,邊做邊學,不用追求完美,有太大壓力,誰知道以後需求怎麼變呢。


庫就是書。想用的時候拿出來查一下。

框架就是書架。你自己往裡面放書。

架構就是書架得結構設計。

平台就是房子,你可以用來放書架,也能賣給別人用,或者租掉。


庫實現了可重用的功能,可以被不同應用使用,但只是被動使用,應用可以用這個庫也可以用其他庫,庫並不能左右應用。

框架是一個半成品的應用,和庫的最大區別是框架直接左右了應用怎麼來寫。

狹義的架構可以是一個應用內部結構,廣義的架構設計到多個應用之間關係、存儲策略、部署策略、危機處理策略......太多了。

平台一般來說是針對外部而言的,比如對於客戶你說我是一個電商平台,對內才說架構,對於開發者你說我是一個雲服務平台,對自己開發者才談架構。


從技術角度講,抽象層次不一樣;從使用角度講,能完成的事情不一樣;從行業角度講,就業方向不一樣;從學習角度講,難易程度也是不一樣的。簡單說下我的理解:

1、概念

類庫:基於基礎功能和演算法的抽象,例如: glibc 和 STL 類庫,一組有關聯關係的類的集合,離最終產品較遠,面嚮應用的開發。

框架:基於通用功能和常見問題的抽象,例如: spring , live555 等,一組有關聯關係的類庫的有效整合,這裡的有效離最終產品較近,面向服務的開發,搭建好之後是可以直接提供一些基礎服務的。

平台:基於操作系統級或虛擬機的抽象,基於整個生產、生態環境的抽象,例如: Java虛擬機,Lua 虛擬機,紅帽Linux,監控平台,CDN平台,數據中心平台。平台是有有系統平台、應用平台之分的,大部分都不指產品,而指產品運行的基礎環境,比如系統平台如 Linux ,應用平台如監控平台,CDN平台等。但有時也會把支持二次開發的成熟的產品也叫做平台,如現在在CDN行業比較火的 Openresty。面向新語言的開發和整個產品線的有效整合,這個難度就大了...

2、區別和聯繫

類庫:是框架的子集,可以被多個框架使用。

框架:是類庫的超集,可以只包含一個類庫。

平台:與框架和類庫關係不大。

類庫集:只是一組有關聯關係的類庫的鬆散整合,有可能但不一定會形成框架。

至於架構么,這個範圍就大了,期待大牛的回答。


這幾個詞都不是在同一個層面上的,一個一個說,上下文是軟體系統

平台:是一整套生態系統,它提供了框架,庫等等。

架構:某個東西是怎麼設計的,解剖圖。

下面這兩個東西,本質都是service,唯一的區別在於控制權。

框架:你交出控制權,你是輸入。

庫:控制權在你手上,你接受輸入,產生輸出。


庫是工具,框架是工具包加規則,架構是《論積木的101種玩法》,平台是不打算單個賣給你或加很多很多很多錢也可以單獨給你來一套


簡單的說 庫是單一語言或技術實現的專一功能 比如jquery是js實現的dom操作庫。

框架是單一語言或技術實現的綜合功能 ,比如php的mvc框架laravel ,比如js的mvc框架 react 。

架構是由多種語言或技術實現的解決方案 比如 RESTFull 架構 設計中的後端採用了php的laravel框架 ,mysql資料庫,前端採用了js框架react 。

平台是指基於操作系統的技術架構,比如上述技術架構的平台搭建在linux操作系統 。再比如某.net項目是運行在window平台上。

庫&< 框架 &<架構 &< 平台


庫:

我的代碼裡面使用了庫,運行的是我的代碼,庫是子系統

框架:

我的代碼填在框架里,運行的是框架,我的代碼是子系統

以上兩者是自己代碼與第三方代碼的組織關係。

架構:

跟上面兩者不同,指的是服務、進程、層次等系統組合與傳遞的形式,一般只有大而複雜的系統才需要一定的架構設計。

架構考慮通常是運行時系統之間的關係。

平台:

當很多服務都有一個共有的需求時,我們就可以在架構底層添加一個平台服務,平台把公共需求抽象出來,作為統一的介面給出。

平台可以理解為架構的一種形式,能解決某類架構問題。


架構有單機和多機之分。單機的架構你可以看成設計模式。多機的架構你可以看成網路的拓補圖。


當你自己設計一個軟體時,設計好分成幾個模塊,功能是什麼,介面有哪些,這叫架構,

然後你不想寫底層代碼,招了幾個實習生寫,讓他們每個人寫一個模塊,每個人只要知道自己模塊的介面函數就行,只能調用介面函數,不能修改,限定了一種格式,叫框架

然後程序完成了,你需要發布出去,是發布在windows 商店還是蘋果蘋果商店,還是npm還是git,這個是平台

如果你的軟體叫XX,是一個工具,放在npm上了,別人要使用時需要從npm下載,這叫做引入XX庫


同求,這幾個概念的區別。


推薦閱讀:

如何畫架構圖?
前後端分離?
開發完項目都需要進行內存泄露的檢測嗎?
如何評價基於Volta架構的NVIDIA TITAN V?
ARM架構和MIPS架構以及X86架構的區別是什麼?

TAG:架構 | 框架 | 平台 | 庫計算機 |