Spring.Net 能爲咱們作點什麼

本文內容

  • 概述
  • 背景
  • 模塊
  • 使用場景
  • 入門應用
  • Spring.NET 相關項目

本文正式開始前,我以目前所能想到的、此時此刻能想到的,先簡單說下,爲何會有像 Spring.Net 這樣的東西。首先,第一反應,Spring.Net 可能跟 Java 裏的 Spring 有關——它是 Java Spring 的 .Net 版本。但不是簡單的移植。其次,Java 的起步、發展和流行比 C# 要早。C# 1.0 遠遠不如 Java(此話不是我說的,而是廣泛認爲),直到 C# 2.0。那麼,Java 裏好的編程實踐,在 C# 中也同樣適用。html

另外,當我採用面向對象編程時,接下來遇到的問題是,我如何定義類,並將它們很好的組織起來?才能使個人代碼更容易維護,包括:前端

  • 容易修復 BUG;
  • 修復 BUG 後,不會產生新的 BUG;
  • 應付不斷變化的需求;
  • 應付將來軟件的變化;
  • 可讀性好,其餘人能很快了解你程序的整體思路等等。

剛剛開始職業生涯時,每走一步,都會遇到困難。實在不知道如何選擇。代碼,感受這麼寫行,那麼寫也行……web

直到看到「設計模式」。根據每一個模式描述,你能夠結合本身場景來選擇。好比:算法

  • 當你本身的程序,遇到像「算法」封裝問題時,可使用策略模式;
  • 當你本身的程序,遇到像「改造以前系統」,或利用現有類,從新組合成一個新的類等問題時,可使用外觀模式;
  • 當你本身的程序,遇到像「訂閱」這樣問題時,可使用觀察者模式;
  • 當你本身的程序,遇到像僅僅只須要一個實例時,可使用單件模式等等。

以後,你會發現,設計模式是頗有用。但它仍是須要你,利用 .Net 框架提供的基類,根據你的場景來從新組織你本身的類——從零開始,設計本身程序。就像架構師作的工做同樣。但不是所有,僅僅是架構師最基本的工做。spring

複用是咱們一直追求的目標之一。數據庫

但是,真有這個必要嗎?除了核心的業務部分,我要重寫日誌子系統/程序集/相關類;重寫監控子系統/程序集/相關類;重寫緩存子系統/程序集/相關類;重寫併發事務子系統/程序集/相關類等等,就算不是企業級應用程序,這幾個方面的功能我也須要啊。不管是不是客戶須要的,對於一個完整的、健壯的應用程序來講,都是須要的。編程

也許,這些子系統/程序集/相關類在接下來的項目中能夠複用。好比引用現成的程序集,添加現有類。咱們不能保證,這樣的複用,以前的代碼徹底不用改動。但這樣的方式,遠遠不夠。咱們須要在更高的層次,在架構上達到複用。不管什麼樣的應用程序,總有那麼幾個「方面的功能」是須要的。若是能夠將這些「方面的功能」,能夠隨意加進本身的項目,那就太好了——面向方面編程。設計模式

Spring.Net 這樣的東西能夠爲咱們作到。緩存

 

概述


Spring.NET 應用程序框架爲企業級開發提供全面的基礎框架支持。它去掉使用基類庫附帶的複雜性完成最佳的、簡單的實踐,如測試驅動開發。Spring.NET 由http://www.springsource.com/ 建立、支持和維護。服務器

Spring.NET 的設計是基於 Java 版本的 Spring 框架,在世界範圍內不少企業級應用程序中使用。Spring.net 不是簡單的移植,它是不依賴於具體平臺,並基於已驗證的體系結構和設計模式。Spring.net 功能的廣度跨越應用程序各個層(application tier),讓你能夠把它看成「一站式(one stop shop)」,但不是必需的。Spring.net 不是一個要麼徹底不用,要麼得所有使用的解決方案。你能夠單獨使用它的模塊。稍後描述這些模塊。

企業級應用程序一般由不少各類的物理層(physical tiers )組成,在每一個層內,功能一般被拆分到功能層(functional layers)。如業務層(business service layer)使用數據訪問層(data access layer)中的一個對象來完成一個用例(use-case)或應用。不管如何構建你的應用程序,在一天結束時,會有各類各樣相互協做的對象,以造成適當的應用。所以,應用程序中的對象是彼此依賴的。

tier 是「層」的意思,但 layer 也是「層」。它們不一樣。相似於「婚禮蛋糕」與「生日蛋糕」的區別。雖然都是分層的,但歷來沒見過「婚禮蛋糕」作得像「生日蛋糕」似的。好比,咱們說網絡七層協議(OSI)時使用的是 layer。

如上所述,官方文檔,在談論硬件時,使用 tier,而在談論軟件結構時,則使用 layer。

.NET 平臺爲構建應用程序提供了豐富的功能,從基本類型和基類(定義新類)到功能完善的應用程序服務和 Web 框架,都有很好的支持。但 .NET 平臺並無提供任何管理基礎應用的模塊,並將它們組合成一個相互協做的總體,這隻能依靠架構師或開發人員本身完成。誠然,目前有不少用於設計業務系統的設計模式,將各類類或對象組合成能正常工做的完整的應用,如工廠模式、抽象工廠模式、生成器模式、裝飾者模式及服務定位(Service Locator)等,這些模式已被軟件行業普遍接受。雖然,這些模式很是好,但也不過是些命了名的最佳編程方式而已。不少相關資料都會介紹這些模式的做用、應用場景、解決的問題等等。通過仔細研讀,應用到咱們的本身系統中。

Spring.NET 的控制反轉(Inversion of Control,IoC)容器所解決的正是如何在企業級應用中將類、對象和服務組合成應用程序。IoC 容器經過廣泛認同的方式將分散的組件組合成完整的應用程序。Spring.NET 框架所採用的都是被業界公認的、已經被定型的最佳編程方式。實際上,這些模式已經成爲經典,經過 Spring.NET,咱們能夠直接將它們整合到咱們本身的應用程序中。目前,已有不少組織和機構用 Spring 框架開發出了健壯、易於維護的應用程序。

以往,咱們用 .NET 開發應用程序,都是利用 .NET framework 提供的類庫,而後,設計本身的類,以及類之間的組織方式。但軟件開發實踐代表,有些功能是軟件經常使用的,不管出於何種須要,好比日誌、性能監控、併發事務等等。這些經常使用的功能就是所謂的「方面」。Spring.Net 爲咱們直接提供了不少「方面」,能夠將這些現成的「方面」集成到咱們本身的應用程序。

 

背景


2004 年初,Martin Fowler 問他網站的訪問者:什麼時候須要控制反轉:「問題是,控制的哪些方面是反轉的?」以後,Fowler 建議從新命名(或至少給出一個更能自我描述的名字),因而,開始使用術語「依賴注入」。此後,他的文章繼續解釋控制反轉(Inversion of Control,IoC)和依賴注入(Dependency Injection,DI)原則的思想基礎。

若想了解依賴注入(IoC)和控制反轉(DI),請參看文章 http://martinfowler.com/articles/injection.html

「控制反轉(Inversion of Control,IoC)」和依賴注入(Dependency Injection,DI)意味着將你設計好的類交給系統去控制,而不是在你的類內部控制。

 

模塊


Spring.NET 模塊以下表所示,可讓咱們大概瞭解 Spring.NET 都能作什麼。

模塊 描述
Spring.Core Spring.Core 是框架最基本的部分,經過依賴注入讓你配置你的應用程序。下面的功能都基於這裏。
Spring.Aop 使用該模塊完成「面向方面編程(Aspect-Oriented Programming,AOP)」。AOP 集中於應用程序中有針對性的常見功能。Spring 的「方面」庫提供預約義的、易於使用的應用,好比事務、日誌、性能監控、高速緩存、方法重試和異常處理。
Spring.Data 該模塊以更高的效率和一致性實如今 ADO.NET 中數據訪問功能,和完成聲明式事務管理。
Spring.Data.NHibernate 該模塊把 NHibernate 與 Spring 聲明式事務管理功能集成在一塊兒,很容易在同一個事務內混合使用 ADO.NET 和 NHibernate 操做。NHibernate 1.0 用戶將經過易於使用的 API 來完成數據訪問操做。
Spring.Messaging 該模塊可與微軟消息隊列中間件(Microsoft MSMQ message queing middleware)交互,提升抽象層次。

Spring.Messaging.NMS

該模塊可與 Apache 消息隊列中間件(Apache ActiveMQ (NMS) message queing middleware)交互,提升抽象層次。

Spring.Messaging.EMS 該模塊可與 Tibco 企業級消息服務隊列中間件(Tibco Enterprise Message Service (EMS) message queing middleware)交互,提升抽象層次。
Spring.Web 
Spring.Web.Extensions
當編寫 ASP.NET Web 應用程序時,能夠更有效地解決以前使用 ASP.NET 不便的地方,如數據綁定、驗證和 ASP.NET 頁面(page)/控件(control)/模塊(module)/提供者(provide)的配置,提升抽象層次。
Spring.Web.Mvc 該模塊能夠把 Spring.Core 和 Spring.Aop 模塊的功能集成到你的 ASP.NET MVC 2 項目。
Spring.Web.Mvc3 該模塊把 Spring.Core 和 Spring.Aop 模塊的功能集成到你的 ASP.NET MVC 3 項目。
Spring.Services 該模塊適應通常的 CLR 對象,這樣就能夠被一個分佈式通訊技術使用,例如 .NET Remoting、Enterprise Services 和 ASMX Web Services。這些服務能夠經過依賴注入來配置,並應用 AOP 來「裝飾」。
Spring.Testing.NUnit 該模塊使用 NUnit 完成集成測試。
Spring.Testing.MSTest 該模塊使用 MSTest 完成集成測試。

Spring.Scheduling.Quartz

該模塊支持與 Quartz.NET 做業調度基礎框架進行交互。

Spring.Core 模塊還包含以下額外功能:

  • 表達式語言(Expression Language) - 提供高效的查詢,以及在運行時操做對象圖表。這是配置對象注入的新方式,即以 "#{…}" 做分界符,分界符裏邊的內容是表達式語言;
  • 驗證框架(Validation Framework)- 爲業務對象以編程或聲明式建立複雜的驗證,提供強大的用戶界面的框架;
  • 數據綁定框架(Data binding Framework)- 爲完成數據綁定,提供用戶界面框架;
  • 動態反射(Dynamic Reflection)- 提供高性能反射的 API;
  • 線程(Threading)- 提供額外的併發抽象,如線程的閥門(Latch)、信號量(Semaphore)和線程本地存儲(Thread Local Storage);
  • 資源抽象(Resource abstraction)- 提供通用接口以一個多態和與協議無關的方式把文件或 URL 看做是 InputStream。

 

使用場景


你能夠在不少場景,從簡單獨立的控制檯應用程序,到利用 Spring 的事務管理功能和集成 Web 框架的全面的企業級應用程序,建立程序塊。

須要注意的是,Spring 框架並不強制你使用它裏邊的全部東西;它不是一個要麼不用,要麼全用的解決方案。現有的經過標準 ASP.NET 建立的前端(界面),經過 Spring 提供的事務和/或數據訪問功能,能夠與基於 Spring 的中間件很好地集成在一塊兒。你須要作的惟一事情是,使用 Spring 的控制反轉容器鏈接你的業務邏輯,並使用 WebApplicationContext 把它集成到你的 Web 層,以便找到中間層服務和/或用依賴注入配置你的 ASP.NET 頁面。

雖然,Spring 框架不會強制任何特定的應用程序架構,但它鼓勵一個區分表現層、服務層、數據訪問層和數據庫層的、有良好分層的應用程序架構。

 

入門應用


Spring.Net 有幾個示例程序,在其安裝目錄。這些示例展現了 Spring.Net 的各個特性。

若是你已熟悉依賴注入、AOP,或有使用 Spring 框架 Java 版本的經驗,那麼你能夠跳過這些示例。

  • Movie Finder - 利用 Spring 的控制反轉容器,演示依賴注入技術
  • 應用程序上下文(Application Context)- 演示 IoC 容器,如本地化、ResourceSet  對象的訪問,以及把資源應用到對象屬性
  • 面向方面編程(Aspect Oriented Programming)- 演示利用 AOP 框架向現有的對象添加額外的行爲
  • 分佈式計算(Distributed Computing)- 演示遠程服務事務的計算器,使你經過 .NET Remoting、Web 服務,或一個企業級服務組件導出一個普通的 CLR 對象(POCO)。同時,也演示了相應的客戶端代理
  • WCF - 展現一個 WCF 基於計算器的例子,經過依賴注入配置 WCF 服務和應用 AOP 通知
  • Web Application - SpringAir - 該機票預訂系統演示了 ASP.NET 框架,展現 ASP.NET 頁面、數據綁定、驗證和本地化的依賴注入
  • Web Development - 演示在 ASP.NET 中使用依賴注入和Spring 的雙向數據綁定的初級例子
  • ASP.NET MVC2 - 演示把依賴注入和容器集成到 ASP.NET MVC 2 的初級例子
  • ASP.NET MVC3 - 演示把依賴注入和容器集成到 ASP.NET MVC 3 的初級例子
  • 數據訪問(Data Access)- 演示如何簡化基於數據訪問層的 ADO.NET 框架
  • 事務管理(Transaction Management)- 演示爲本地和分佈式事務在 .NET 中使用聲明式事務管理
  • AJAX - 演示如何在客戶端 JavaScript 中,把 webservice 做爲一個普通的 CLR 對象(POCO)訪問
  • NHibernate Northwind - 演示簡化 NHibernate 使用的 Spring NHibernate 集成。Web 層(web tier)也包含了如何使用 Open-Session In View approach 在 Web 層進行會話管理
  • Quartz Quickstart - 演示使用 Quartz.NET 集成進行調度
  • MSMQ - 演示 MSMQ
  • NMS - 演示 NMS

 

Spring.NET 相關項目


除了 Spring.NET 項目自己,還有不少與其相關的項目。這些項目提供超出核心 Spring.NET 框架的額外功能。從加強配置工具和庫,到 REST 客戶端,以支持額外的消息框架和標準。以下表所示。

Spring.NET CodeConfig

經過標準的 .NET 代碼,而不是 XML 配置,提供配置 Spring 容器的功能

See http://springframework.net/codeconfig/ for resources, downloads, and more information

Spring.NET REST Client

簡化與 HTTP 服務器之間的通訊,執行 RESTful。它處理 HTTP 鏈接,使應用程序代碼提供的網址(多是模板變量),並提取結果。

See http://springframework.net/rest/ for resources, downloads, and more information

Spring.NET AMQP

supports the Spring programming model with AMQP, especially but not limited to RabbitMQ

See http://springframework.net/amqp/ for resources, downloads, and more information

Spring.NET Visual Studio Add-In

在 VS.NET 2010 中,提供發佈 Spring XML 配置的智能感知幫助

See http://springframework.net/vsaddin/ for resources, downloads, and more information

鼓勵 Spring.NET 使用者開發超出 Spring.NET 框架核心的相關項目,提升開發者的效率。

 

轉載自http://www.cnblogs.com/liuning8023/archive/2012/07/07/2580616.html

相關文章
相關標籤/搜索