第一章 Spring.Net介紹


1.1 概述

  在Java社區中Spring經歷的長時間的考驗,已經是一套很成熟穩定的框架。而Spring.Net 的前身是 Java版的Spring。Spring.Net是以Java版的Spring框架為基礎,將Spring(Java版)的概念和編程思想移植到.Net平台上來。

  Spring.Net 是一個應用程序框架,它的目的是幫助軟件開發人員創建企業級的.Net應用程序。它提供了很多方面的功能,比如依賴注入,面向切面編程(AOP),數據訪問抽象以及ASP.Net擴展等等的功能。

  Spring.Net 框架是一套輕量級的面向企業級應用的開源框架。Spring.Net 不僅是開源的,而且Spring.Net 還提供了眾多的功能,軟件過程中幾乎80%工作都能通過它完成。雖然Spring.Net 功能眾多,但是使用Spring.Net后對於我們的應用程序消耗來說卻是微不足道的,它是非侵入式的(幾乎所有的功能,可以通過配置文件來管理,而開發人員可以使用Spring.Net 中一個功能模塊或者同時使用多個功能模塊。在使用Spring.Net的功能模塊中,可以只通過配置就能完成,並且不影響原有的開發方式),正是由於這種非侵入式,因此Spring.Net 框架才被稱為面向企業級應用輕量級功能完善的開源框架。

1.2 之前我們如何軟件開發

  在企業級應用中一般都是很復雜的,不像我們以前在學校開發的XX管理系統那樣。企業級應用中我們通常都使用 三層結構(多層結構)來將應用程序划分為若干個功能層。如數據訪問層,業務邏輯層,表示層等等。例如:通常表示層需要調用業務邏輯層的方法,業務邏輯層需要調用數據訪問層的方法,數據訪問層需要訪問數據庫。不管應用程序如何構建,最終都是相互協作(各層之間的調用)的對象。這些對象一起組成了完整的應用程序(我們開發的軟件)。所以我們一直說,軟件中對象與對象之間具有相互依賴性。當軟件復雜到一定程度的時候(企業級應用就很復雜了),如果軟件架構的不好,各層之間依賴性太強,這個時候當需求發生變化的時候,我們就無法讓我們的軟件去適應這些變化,最終導致我們的軟件流產。

  微軟.Net平台為構建軟件提供了豐富的功能。從基元類型到基礎類庫,以及到功能完善的WinForm和Asp.Net 框架。但是可能是由於之前沒有開源的原因,造成.Net社區一直沒有發展壯大起來。而.Net平台本身並沒有提供任何方式來管理業務邏輯並將他們以適當的方式組織起來的解決方案,以前只能是架構師或者開發人員去創建應用程序。可是在我們國家的確是人才有限,好的架構師不是每個團隊都有。

  誠然,目前有很多設計模式可用於業務領域的設計,我們使用這些設計模式可以將類或者對象比較好的組合起來構建我們的軟件。如:工廠,抽象工廠,建造者,裝飾者,以及代理模式等等,已經被現今的軟件開發行業廣泛接受和采用(這可能就是這些設計模式很早就被定型為模式的原因,在90年代Gof就出版了《設計模式:可復用面向對象軟件的基礎》一書),這些模式都很好,他們大部分都是定型的已命名的編程方式,這些模式一般都會說,在什么場合下使用,能解決什么問題。

1.3 Spring.Net 所解決的問題

  Spring.Net 是一套業務邏輯層的框架,它在我們的軟件開發中起着承上啟下的作用(上有表示層,下有數據訪問層)。在Spring.Net中大量使用了設計模式,如果我們在軟件開發中合理規范的使用Spring.Net 框架,開發人員無需達到架構師的水平就能夠比較好駕馭我們的應用程序,並且提高開發效率。

  在Spring.Net的IOC(控制反轉:稍后會和大家詳細談到)容器所解決的,正是如何在企業級應用中如何有效,合適的將類和對象以及服務組合成應用程序的問題。IOC容器通過正統(正統的意思是,這些方式都是經過業界多年考驗,已經定型了為設計模式的最佳編程方式)的將分散的組件或者類以及對象組合成完整的應用程序。Spring.Net 將他們有效的整合起來。Spring.Net大大減少了各個層次之間的耦合,分離了關注點(我們以前關注數據訪問方式,頁面邏輯等等)讓開發人員有更多的精力只關注於業務邏輯。它為我們創建出具有擴展性,維護性的軟件提供了基礎。

1.4  背景

  在2004年初,Martin Fowler曾經問他網站的讀者:當我們談到控制反轉時,“問題是,它們反轉的是哪方面的控制?”。隨后Fowler建議為控制反轉重新命名(或者起碼給它一個更具自我描述性的名字),所以依賴注入(Dependency Injection)這一術語才得以使用。Fowler在論文中也討論了控制反轉和依賴注入原理背后的一些概念。如果您需要了解正宗的IoC和DI理論,可以參考這篇論文:http://martinfowler.com/articles/injection.html

1.5  控制反轉 VS 依賴注入

  控制反轉(IOC) 和 依賴注入(DI) ,其實它們是同一個概念的不同角度的描述,由於控制反轉概念比較模糊(可能只是理解為容器控制對象這一個層面,很難讓人想到誰來維護對象關系),所以2004年大師級別人物Martin Flower又給出了一個新名字:”依賴注入”,相對控制反轉而言,“依賴注入”又 確描述了被注入對象依賴IOC容器配置以來對象。

以下會有專門的章節幫我們來理解什么是 控制反轉 和 依賴注入。

1.6  Spring.Net 整體結構以及模塊

 

          (圖1  Spring.Net框架的整體結構:該圖出自Spring.Net 官方網站)

   Spring.NET框架包括很多功能,這些功能被很好的組織進一系列模塊當中,如下圖所示。Spring.NET 1.0包括完整的IoC容器和AOP類庫。1.1版將加入Web、ORM和數據模塊。Spring.NET的下載包中並不包含與其它類庫(如NHibernate,TIBCO EMS,Anthem,和IIOP.NET)集成的模塊,如果需要您可以單獨下載。上圖為Spring.NET的各個核心模塊。灰色陰影部分在1.0版中已經可用了,其它模塊會在未來版本中陸續發布。目前可以從Spring.Net的官方網站上單獨下載這些新的模塊。

(1)     Spring.Core:

作為整個框架的基礎,實現了依賴注入的功能。Spring.NET的大部分模塊都要依賴或擴展該模塊。Spring.Core的基礎是IObjectFactory接口,該接口用一個簡單而優雅的方式實現了工廠模式,使我們可以無需自行編寫singleton類型和眾多的服務定位器,並允許將對象配置及其依賴關系與具體的程序邏輯解耦。該模塊中的IApplicationContext接口是IObjectFactory的擴展,增加了諸多企業級功能,包括使用資源文件進行文本本地化、事件傳播和資源裝載等等。

(2)     Spring.AOP:

為業務對象提供面向方面編程(AOP)的支持。AOP完善了IoC容器的功能,為創建企業應用和使用聲明式服務奠定了堅實的基礎。

(3)     Spring.Web:

對ASP.NET進行了一系列功能擴展,包括對ASP.NET頁面進行依賴注入、雙向數據綁定、在ASP.NET 1.1中使用Master page、以及增強的本地化功能支持等。

(4)     Spring.Services:

允許將任意的“普通”對象(意為沒有繼承任何指定基類型的對象)發布為企業服務(COM+)或遠程對象。通過依賴注入和特性元數據覆蓋等功能,該模塊可使.NET的Web服務獲得極大的靈活性。同時也支持Windows后台服務。

(5)     Spring.Data:

定義了一個抽象的數據訪問層,可以跨越各種數據訪問技術(從ADO.NET到各種ORM)進行數據訪問。該模塊包含一個ADO.NET的抽象層,減少了使用傳統ADO.NET進行編碼和事務管理時的工作量。

(6)     Spring.ORM:

為時下流行的ORM類庫( 如:Nhibernate, Ibatis.Net等)提供了一個整合層,其中包含聲明式事務管理等諸多功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM