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

相关文章
相关标签/搜索