本文源自《.NET通信框架的設計、實現與應用》書稿第一章內容 類庫是一些類的集合,只要我們將一些可以復用的類集中放到一個Library中,我們就可以稱其為一個類庫。 類庫中的許多元素(如類、結構、介面、枚舉、委托等)之間可能有一些關聯,但這些關聯通常用於支持一個類概念或介面概念的完整表達。 如果我們 ...
本文源自《.NET通信框架的設計、實現與應用》書稿第一章內容
類庫是一些類的集合,只要我們將一些可以復用的類集中放到一個Library中,我們就可以稱其為一個類庫。
類庫中的許多元素(如類、結構、介面、枚舉、委托等)之間可能有一些關聯,但這些關聯通常用於支持一個類概念或介面概念的完整表達。
如果我們從一個更高的視角來審視類庫,可以發現類庫中的一個個“完整的概念”之間是無關的或是關係鬆散的。
再來說框架,框架的第一含義是一個骨架,它封裝了某領域內處理流程的控制邏輯,所以我們經常說框架是一個半成品的應用。
由於領域的種類是如此眾多,所以框架必須具有針對性,比如,專門用於解決底層通信的框架,或專門用於醫療領域的框架。
框架中也包含了很多元素,但是這些元素之間關係的緊密程度要遠遠大於類庫中元素之間的關係。框架中的所有元素都為了實現一個共同的目標而相互協作。
框架與類庫的區別主要表現在以下幾個方面:
(1)從結構上說,框架內部是高內聚的,而類庫內部則是相對鬆散的。
(2)框架封裝了處理流程的控制邏輯,而類庫幾乎不涉及任何處理流程和控制邏輯。
框架中的處理流程和控制邏輯需要經過精心的設計,因為所有使用了該框架的應用程式都會復用該設計。
(3)框架具有IOC(控制反轉)能力,而類庫沒有。IOC,即俗稱的好萊塢模式(Don’t
call us, we will call
you)。
對於類庫中的元素來說,通常都是由我們的應用來調用它;
而框架具有這種能力――在適當的時候調用我們應用中的邏輯。這種能力是通過框架擴展點(或稱為“插槽”)來做到的――具體的應用通過擴展點註入自己的邏輯,而在適當的時候,框架會調用這個擴展點中已註冊的邏輯。
(4)框架專註於特定領域,而類庫卻是更通用的。
框架著力於一個特定領域的解決方案的完整表達,而類庫幾乎不針對任何特定領域。比如,本書中提到的通信框架只適用於需要在TCP/UDP基礎上直接構建通信的應用程式,而像正則表達式這樣的類庫卻可以使用在各種不同的應用中。
(5)框架通常建立在眾多類庫的基礎之上,而類庫一般不會依賴於某框架。