(讀書筆記).NET大局觀-.NET框架類庫概觀

.NET框架類庫概況

 

構建在.NET框架上全部的軟件,都會用到通用語言進行時,即便基於最簡單的CLR程序,也須要用到一部分.NET框架類庫,更精緻複雜的軟件則使用這個類庫提供的更多服務。程序員

 

.NET框架類庫被組織一套具備層次結構的命名空間,每一個命名空間能夠包含類型如類和接口,以及其餘次級命名空間,整個體系的根名爲Systemweb

 

System命名空間

System命名空間是.NET框架類庫的最終源頭,它除了包含一大套次級命名空間之外,自己也包含不少不一樣類型,其中最有意思的就是下面這些:數據庫

 

CLR通用類型系統:定義全部的核心類型編程

Consolewindows

Math 這個類提供兩打以上的方法用來進行各類數學計算數組

Environment 用於訪問「當前運行之程序」的環境信息瀏覽器

GC 用來影響垃圾回收機制什麼時候發生以及如何發生服務器

 

 

System次級命名空間概覽

(這一部分借鑑到http://hi.baidu.com/wqk1025/item/2dccf183f2700cc498255fff文章中的一部分)網絡

命名空間 描述框架

Microsoft.CSharp          支持C#語言編譯和生成代碼

System                         包含了基礎類,用於定義類型/數組/字符串/事件/事件處理程序/異常處理/接口/數據類型轉換/數學計算/應用程序環境管理等等.

System.Coolections   包含了一組用於管理對象集合(例如列表/隊列/數組/哈希表/字典等)的類

System.Data    主要包括了組成ADO.NET體系結構的類

System.diagnostics     提供用於調試/跟蹤,以及與系統進程/事件日誌/性能計數器進行交互的類

System.Drawing 提供訪問GDI+基本圖形功能(在System.Drawing如下的命名空間,包括System.Drawing.Drawing2D和System.Drawing.Text等,提供了更高級和更特殊的GDI+圖形功能)的類

System.IO    包含了用於讀寫數據流/文件和普通輸入/輸出(I/O)功能的類型和類

System.Reflection    包括提供類型檢測和動態綁定對象功能的類和接口

System.reflection.Emit     生成動態程序集

System.Text     包含用於字符編碼/將字符塊轉換爲字節快/將字節塊轉換爲字符塊等功能的對象

System.Text.RegularExpressions     包含了提供訪問.NET框架正則表達引擎的類

System.Timer                  提供了Timer組件

System.Web    包含了用於實施瀏覽器/服務器通訊和其餘Web相關功能的類

System.Web.Services    包含了用於建立和消費Web服務的類

System.Web.UI    包含了用於建立Web頁和控件的用戶接口的類和接口

System.Windows.Forms    包含了用於建立基於WINDOWS的用戶接口的類

System.XML   提供了支持處理XML的類

 

System.Runtime.Remoting是另外一很是重要命名空間,由於它包含你的類型容許訪問其餘進程記憶其餘機器上的託管對象

 

 

 

類庫能夠分爲幾大類:

基礎服務

用於建立於人們交互的web應用程序的服務

用於處理數據的服務

用以建立分佈式程序的服務

 

 

基礎命名空間

接下來要描述的是.NET技術的基本知識——輸入和輸出,序列化,反射,事務,以及互操做性——應該歸入每個.NET程序員開發人員的武器庫

 

輸入和輸出 System.IO

這類最重要的基礎是stream類,該類定義了stream的有用的抽象,它是個字節序列以及以下的一些方法:stream的讀取和塗寫,stream是一個抽象類,所以有許多特定stream類繼承於它,目標是爲開發人員提供一致的方法訪問各類各樣的信息。

 

序列化System.Runtime.Serilization

對象一般都有對象(state),例如一個類的某個實體能夠有一個或者多個字段,每個都包含某個值,從一個對象中抽取這種狀態,不管是將它存儲於某地,或者是經過網絡傳送它,一般都是有意義的,這種抽取的動做稱爲」講一個對象序列化」,而反向的處理,從一個被序列化的狀態重建一個對象,即便人們廣爲人知的反序列化,有點混淆的是:序列化這一術語一般同時指定的是作這兩件事的能力

 

 

.NET框架提供兩套不一樣的格式器,一個是二進制(binaryformatter)實現於命名空間System.Runtime.Serialization.Formatters.Binary的BinaryFormatter class中,將一個對象序列化爲一個「直截了當,形式精簡,解釋(parse)快速」的二進制格式。

二進制格式器以一個簡單而精煉的形式吐出狀態信息

 

另外一個格式器SOAP,實現於命名空間System.Runtime.Serialization.Formatters.Soap中的Soap Formatter類中,將一個對象序列化爲一個SOAP消息

SOAP格式生成一樣的信息幷包裝秤XML格式,然後格式化成爲一個SOAP消息

 

 

當各時期將某個對象序列化之後,所得結果放入一個流中,所謂流就是字節序列的一個抽象概念,所以可包容任何序列化格式,一旦對象唄存儲於一個流中,對象狀態就能夠被存儲於磁盤上(或者被持久化了),或是經過網絡發送給其餘計算機

 

對於一個能夠被序列化的類型,其設計這必須爲其標上Serializable特性

一個被標註以Serializable的類型,當其某個實例被序列化時,能夠指明某些字段不被保存-只要爲他們設置NonSerializable特性便可

 

反射 System.Reflection

每個程序集都包含元數據,手上總有着元數據是很便利的,由於它容許哦咱們建立有意義的功能,例如visual studio中的智能感知技術

反射(Reflection)是.NET中的重要機制,經過放射,能夠在運行時得到.NET中每個類型(包括類、結構、委託、接口和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等。還能夠得到每一個成員的名稱、限定符和參數等。有了反射,便可對每個類型瞭如指掌。若是得到了構造函數的信息,便可直接建立對象,即便這個對象的類型在編譯時還不知道。

程序代碼在編譯後生成可執行的應用,咱們首先要了解這種可執行應用程序的結構。

 應用程序結構分爲應用程序域—程序集—模塊—類型—成員幾個層次,公共語言運行庫加載器管理應用程序域,這種管理包括將每一個程序集加載到相應的應用程序域以及控制每一個程序集中類型層次結構的內存佈局。

 程序集包含模塊,而模塊包含類型,類型又包含成員,反射則提供了封裝程序集、模塊和類型的對象。咱們可使用反射動態地建立類型的實例,將類型綁定到現有對象或從現有對象中獲取類型,而後調用類型的方法或訪問其字段和屬性。反射一般具備如下用途。

 (1)使用Assembly定義和加載程序集,加載在程序集清單中列出模塊,以及今後程序集中查找類型並建立該類型的實例。
 (2)使用Module瞭解包含模塊的程序集以及模塊中的類等,還能夠獲取在模塊上定義的全部全局方法或其餘特定的非全局方法。
 (3)使用ConstructorInfo瞭解構造函數的名稱、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法來調用特定的構造函數。
 (4)使用MethodInfo瞭解方法的名稱、返回類型、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法來調用特定的方法。
 (5)使用FiedInfo瞭解字段的名稱、訪問修飾符(如public或private)和實現詳細信息(如static)等,並獲取或設置字段值。
 (6)使用EventInfo瞭解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等,添加或移除事件處理程序。
 (7)使用PropertyInfo瞭解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等,獲取或設置屬性值。
 (8)使用ParameterInfo瞭解參數的名稱、數據類型、是輸入參數仍是輸出參數,以及參數在方法簽名中的位置等。

 System.Reflection.Emit命名空間的類提供了一種特殊形式的反射,能夠在運行時構造類型。
 反射也可用於建立稱爲類型瀏覽器的應用程序,使用戶可以選擇類型,而後查看有關選定類型的信息。

 

XMLSystem.Xml

XML是eXtensible MarkupLanguage的縮寫

   擴展標記語言XML是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記能夠用方便的方式創建,雖然XML佔用的空間比二進制數據要佔用更多的空間,但XML極其簡單易於掌握和使用。 
   XML與Access,Oracle和SQL Server等數據庫不一樣。數據庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,XML僅僅是展現數據。事實上XML與其餘數據表現形式最大的不一樣是:它極其簡單。這是一個看上去有點瑣細的優勢,但正是這點使XML不同凡響。

事務 System.Transaction

事務的思想,即一組操做做爲一耳光單元成功或失敗,是衆多應用程序的基礎,這個概念原本很簡單,全部操做必須成功,要麼所有失敗

 

 

1、事務的定義

所謂事務,它是一個操做集合,這些操做要麼都執行,要麼都不執行,它是一個不可分割的工做單位。典型的例子就像從網上銀行系統的賬戶A轉賬到賬 戶B,它通過兩個階段:1. 從賬戶A取出款項。2. 把款項放入賬戶B中。這兩個過程要麼同時成功,要麼同時失敗,這一系列的操做就被稱爲事務性(Transactional)操做。

在一個事務性操做的環境下,操做有着如下的4種特性,被稱爲ACID特性

原子性(Atomicity)

當事務結束,它對全部資源狀態的改變都被視爲一個操做,這些操做要不一樣時成功,要不一樣時失敗。

一致性(Consistency)

操做完成後,全部數據必須符合業務規則,不然事務必須停止。

隔離性(Isolation)

事務以相互隔離的方式執行,事務之外的實體沒法知道事務過程當中的中間狀態。

持久性(Durable)

事務提交後,數據必須以一種持久性方式存儲起來。

  2、事務管理器

在軟件系統當中能夠看到不管在數據庫、Web服務、WCF、文件系統都存在着數據參與到事務運做當中,咱們把管理這些數據的工具稱爲資源管理器RM(Resources Manager)。而事務管理器TM(Transaction Manager)就是協調多個資源管理器的工做,保證數據完整性的工具。

 

由上圖能夠看到事務的管理流程,系統通知事務管理器TM來啓動事務,事務管理器TM控制向多個資源管理器RM並協調RM之間的事務操做。圖中存在兩個持久化RM,分別管理數據庫和文件系統,這些事務操做要不一樣時成功,要不一樣時失敗。

事務管理器通常分爲三類:輕量級事務管理器(LTM)、核心事務管理器(KTM)、分佈式事務協調器(DTC)。

1. 輕量級事務管理器 (LTM)

它是包括在 System.Transactions 命名空間內的一個事務管理框架,它只能管理單個應用程序域內的事務。LTM 能夠管理多個易變的RM,但只能管理一個持久化RM。若事務試圖加入第二個持久化RM,那輕量級事務管理器LTM將提高級別。LTM是性能最高的事務管理 器,在可選擇的狀況下應該儘量地使用 LTM 事務管理器。

這裏易變RM是指它參與會引起 「未肯定狀態」 的2PC事務的時候,不須要恢復服務,更多時候,易變RM的數據只存儲在內存當中。

而持久化RM是指它參與會引起 「未肯定狀態」 的2PC事務的時候,它須要恢復服務,持久化RM管理的數據是在於硬盤當中。因此,參與2PC事務的的持久RM必須有新舊兩個版本,若是事務引起 「未肯定狀態」 的時候,那麼它就會聯繫持久化RM,恢復到其中一個版本。

2. 核心事務管理器 (KTM)

KTM是用於WindowsVista和Windows Server 2008 系統中的輕量級事務管理器,與LTM相像,它能夠管理多個易變的RM,但只能管理一個持久化RM。

3. 分佈式事務協調器(DTC)

分佈式事務協調器DTC(Distributed Transaction Coordinator)能管理多個持久化RM中的事務,事務能夠跨越應用程序域、進程、硬件、域等全部的邊界。在Windows Server 2008當中,DTC支持OleDB、XA、WS-AtomicTransaction、WSCoordination、WS- BusinessActivity等多個協議。因爲分佈式事務須要在多個參與方之間實現屢次通信,因此是一種巨大的開銷,所以,在可使用LTM和KTM的時候,應該儘可能避免使用DTC。在上面圖片中的事務同時啓動了兩個RM分別處理數據庫數據與文件數據,當中啓動的就是DTC分佈式事務。

4. 事務類System.Transactioins.Transaction

Transaction是由Framework 2.0 就開始引入,用於顯示管理事務的一個類。經過Transaction能夠直接管理事務的停止、釋放,也能夠獲取、克隆當前的環境事務類。

Transaction的公用屬性

其中Transaction.Current 比較經常使用,它能夠指向一個當前運行環境中的事務,若是環境事務不存在,系統將返回一個null

Transactiontransaction=Transaction.Current;

屬性

說明

Current

獲取或設置環境事務。

IsolationLevel

獲取事務的隔離級別。

TransactionInformation

檢索有關某個事務的附加信息。

 

 

互操做: System.Runtime.InteropService

在.NET框架發佈之前,windows開發世界有windows DNA技術一統天下,不管.NET框架多麼成功,先於它的windows DNA技術並不會立刻消失。

鑑於微軟的庫克已經對這些應用作了巨大的投資,.NET框架必須提供某種方法,讓新程序可以鏈接它們,一樣重要的是。Framework還必須提供一個有效的辦法,讓託管代碼訪問如今非com技術建立的DLLs,並調用有底層操做系統提供的本地服務,這額問題的解決方案,由System.Runtime.InteropService命名空間中的類提供。

 
Windows GUI system.windows.from

這個內容只要作過winfrom的實例就應該比較熟悉

 

WPF(WindowsPresentation Foundation)微軟推出的基於WindowsVista的用戶界面框架,屬於NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架,真正作到了分離界面設計人員與開發人員的工做;同時它提供了全新的多媒體交互用戶圖形界面。

 

遠程安裝windowsform應用程序:ClickOnce

Windows Form界面和瀏覽器界面哪一個更好,答案無疑要視具體點狀況而定,瀏覽器容許訪問全世界的web,並且人們都知道怎麼用。

Windows Form應用程序固然值得用戶,它們的響應速度更快

 

儘管這樣,今天開發的大多數.NET應用程序都是目標與瀏覽器的,一個重要的緣由是來自於部署新版本本地windows應用程序的挑戰,若是運行在客戶端的程序集發生了任何變化,那麼全部客戶系統都必須予以更新,比較而言,部署基於瀏覽器的應用程序的新版本,一般只須要更新程序所運行的服務器便可,若是windows form應用程序安裝變得更容易一些,開打人員將少一個構建基於瀏覽器的軟件的理由,並使本地windows應用程序的優勢獲得最大的發揮。

 

ClickOnce是.NET Framework 2.0版本中新增的技術,它的存在實在使得windows form也能用程序的部署與升級更容易,ClickOnce應用程序能夠從一個web網頁,網絡上某處的共享文件系統以及本地設備進行安裝,一旦安裝好,ClickOnce應用程序可以自動檢測什麼時候發生了更新,而後只複製和安裝哪些自身有變化的部分,如有必要,更新或者整個安裝過程也能夠回滾

相關文章
相關標籤/搜索