本文正式开始前,我以目前所能想到的、此时此刻能想到的,先简单说下,为何会有像 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