Spring.Net 能为我们做点什么
本文內容
- 概述
- 背景
- 模塊
- 使用場景
- 入門應用
- Spring.NET 相關項目
本文正式開始前,我以目前所能想到的、此時此刻能想到的,先簡單說下,為什么會有像 Spring.Net 這樣的東西。首先,第一反應,Spring.Net 可能跟 Java 里的 Spring 有關——它是 Java Spring 的 .Net 版本。但不是簡單的移植。其次,Java 的起步、發展和流行比 C# 要早。C# 1.0 遠遠不如 Java(此話不是我說的,而是普遍認為),直到 C# 2.0。那么,Java 里好的編程實踐,在 C# 中也一樣適用。
另外,當我采用面向對象編程時,接下來遇到的問題是,我如何定義類,并將它們很好的組織起來?才能使我的代碼更容易維護,包括:
- 容易修復 BUG;
- 修復 BUG 后,不會產生新的 BUG;
- 應付不斷變化的需求;
- 應付未來軟件的變化;
- 可讀性好,其他人能很快了解你程序的總體思路等等。
剛剛開始職業生涯時,每走一步,都會遇到困難。實在不知道如何選擇。代碼,感覺這么寫行,那么寫也行……
直到看到“設計模式”。根據每個模式描述,你可以結合自己場景來選擇。比如:
- 當你自己的程序,遇到像“算法”封裝問題時,可以使用策略模式;
- 當你自己的程序,遇到像“改造之前系統”,或利用現有類,重新組合成一個新的類等問題時,可以使用外觀模式;
- 當你自己的程序,遇到像“訂閱”這樣問題時,可以使用觀察者模式;
- 當你自己的程序,遇到像僅僅只需要一個實例時,可以使用單件模式等等。
之后,你會發現,設計模式是很有用。但它還是需要你,利用 .Net 框架提供的基類,根據你的場景來重新組織你自己的類——從零開始,設計自己程序。就像架構師做的工作一樣。但不是全部,僅僅是架構師最基本的工作。
復用是我們一直追求的目標之一。
可是,真有這個必要嗎?除了核心的業務部分,我要重寫日志子系統/程序集/相關類;重寫監控子系統/程序集/相關類;重寫緩存子系統/程序集/相關類;重寫并發事務子系統/程序集/相關類等等,就算不是企業級應用程序,這幾個方面的功能我也需要啊。無論是否是客戶需要的,對于一個完整的、健壯的應用程序來說,都是需要的。
也許,這些子系統/程序集/相關類在接下來的項目中可以復用。比如引用現成的程序集,添加現有類。我們不能保證,這樣的復用,之前的代碼完全不用改動。但這樣的方式,遠遠不夠。我們需要在更高的層次,在架構上達到復用。無論什么樣的應用程序,總有那么幾個“方面的功能”是需要的。如果可以將這些“方面的功能”,可以隨意加進自己的項目,那就太好了——面向方面編程。
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
轉載于:https://www.cnblogs.com/linyefeilyft/p/3374307.html
總結
以上是生活随笔為你收集整理的Spring.Net 能为我们做点什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos6.2安装桌面环境 与中文支
- 下一篇: ASP.Net 页面和后台执行的先后顺序