本文正式開始前,我以目前所能想到的、此時此刻能想到的,先簡單說下,爲何會有像 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 模塊還包含以下額外功能:
你能夠在不少場景,從簡單獨立的控制檯應用程序,到利用 Spring 的事務管理功能和集成 Web 框架的全面的企業級應用程序,建立程序塊。
須要注意的是,Spring 框架並不強制你使用它裏邊的全部東西;它不是一個要麼不用,要麼全用的解決方案。現有的經過標準 ASP.NET 建立的前端(界面),經過 Spring 提供的事務和/或數據訪問功能,能夠與基於 Spring 的中間件很好地集成在一塊兒。你須要作的惟一事情是,使用 Spring 的控制反轉容器鏈接你的業務邏輯,並使用 WebApplicationContext 把它集成到你的 Web 層,以便找到中間層服務和/或用依賴注入配置你的 ASP.NET 頁面。
雖然,Spring 框架不會強制任何特定的應用程序架構,但它鼓勵一個區分表現層、服務層、數據訪問層和數據庫層的、有良好分層的應用程序架構。
Spring.Net 有幾個示例程序,在其安裝目錄。這些示例展現了 Spring.Net 的各個特性。
若是你已熟悉依賴注入、AOP,或有使用 Spring 框架 Java 版本的經驗,那麼你能夠跳過這些示例。
除了 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