摘要: MusicStore MVC Music Store是基于最佳ASP.NETMVC入门教程,引导如何使用MVC和Visual Studio进行Web开发。MVC Music Store最新版本基于ASP.NET MVC 3使用Visual Studio 2010开发 MVCQuick.Framework MVCQuick.一个快速开发ASP.NET MVC应用程序的原创开源框架。其中MVCQuick.Framework包括一个存储库、一个IoC容器、一个日志管理器、一个安全提供者。阅读全文
posted @ 2011-10-24 13:21 GuYoung 阅读(1313) 评论(3) 编辑
正文内容加载中...
posted @ 2011-10-23 15:50 GuYoung 阅读(403) 评论(5) 编辑
摘要: 接NHibernate 3.2实现Repository(ORuM)前文 使用NHibernate-->NHibernate.Linq-->Linq,结合NHibernate和LINQ的优势,使Repository的对象持久化和对象查询两方面兼优,实现了鱼和熊掌兼得。 使用LINQ重构Repository Repository成效 Repository执行过程分析阅读全文
posted @ 2011-10-23 15:19 GuYoung 阅读(1388) 评论(1) 编辑
摘要: 在.NET Framework 3.5中提供了LINQ 支持后,Linq的呼声一度很高,各种LINQ Provider更是满天飞。他能够将数据查询语句集成到编程语言中,以一种统一的方式操作各种数据源,减少数据访问的复杂性。而LINQ本身也提供了很 好的扩展性,使开发人员可以轻松地编写属于自己的LINQ Provider。 在NHibernate 3.0.0 之前版本中并不存在Linq功能,Ayende Rahien贡献者为NHibernate2.1.0GA和NHibernate2.1.2GA版本设计第三方NHiberante.Linq.dll(对应为NHibernate.Linq-1.0.0.GA-bin.zip和NHibernate.Linq-2.1.2-GA-Bin.zip)(目前已经停止了维护),它是基于Criteria API的Linq Provider,主要功能是将简单的Linq表达式转化为Criteria API,由于Criteria API的功能有限,所以存在很多天生的不足(联接和子查询不支持)。如果使用NHibernate2.1.0GA或者NHibernate阅读全文
posted @ 2011-10-22 20:59 GuYoung 阅读(1838) 评论(7) 编辑
摘要: LINQ(Language Integrated Query,语言集成查询),发音 "link",是一组技术的名称。LINQ是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。LINQ 将强大的查询功能扩展到 C# 和 Visual Basic 的语言语法中,并采用标准的、易于学习的查询模式。可以对此技术进行扩展以支持几乎任何类型的数据存储。 传统上,针对数据的查询都是以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持。 此外,您还必须针对以下各种数据源学习一种不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等等。 LINQ 使查询成为 C# 和 Visual Basic 中的一流语言构造。 您可以使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询。 下图显示了一个用 C# 语言编写的、不完整的 LINQ 查询,该查询针对 SQL Server 数据库,并具有完全类型检查和 IntelliSense 支持。阅读全文
posted @ 2011-10-22 10:27 GuYoung 阅读(1032) 评论(0) 编辑
摘要: LINQ扩展性 LINQ查询数据源 Linq Provider Linq Provider实现方法 Linq to Sql Provider LINQ 提供程序列表阅读全文
posted @ 2011-10-21 09:36 GuYoung 阅读(1299) 评论(1) 编辑
摘要: System.Web.Profile.ProfileProvider类 定义 ASP.NET 为使用自定义配置文件提供程序提供配置文件服务而实现的协定。 继承层次结构: System.Object System.Configuration.Provider.ProviderBase System.Configuration.SettingsProvider System.Web.Profile.ProfileProvider System.Web.Profile.SqlProfileProvider ASP.NET 配置文件提供对用户特定属性的持久性存储和检索。 配置文件属性值和信息按照由 ProfileProvider 实现确定的方式存储在数据源中。 您可以使用 .NET Framework 附带的配置文件提供程序(由派生自 ProfileProvider 抽象类的类表示),也可以通过创建派生自 ProfileProvider 的新类来实现自己的提供程序。 创建自定义配置文件提供程序有两个主要原因: 您阅读全文
posted @ 2011-10-20 10:15 GuYoung 阅读(358) 评论(0) 编辑
摘要: System.Web.Security.RoleProvider类 定义 ASP.NET 为使用自定义角色提供程序提供角色管理服务而实现的协定。 继承层次结构: System.Object System.Configuration.Provider.ProviderBase System.Web.Security.RoleProvider System.Web.ClientServices.Providers.ClientRoleProvider System.Web.Security.AuthorizationStoreRoleProvider System.Web.Security.SqlRoleProvider System.Web.Security.WindowsTokenRoleProvider ASP.NET 角色管理旨在使您可以轻松地将多个不同的角色提供程序用于您的 ASP.NET 应用程序。 您可以使用 .NET Framework 附带的角色提供程序,也可以实现自己的提供程序阅读全文
posted @ 2011-10-19 15:09 GuYoung 阅读(1410) 评论(0) 编辑
摘要: System.Web.Security.MembershipProvider类 定义 ASP.NET 为使用自定义成员资格提供程序提供成员资格服务而实现的协定。 继承层次结构: System.Object System.Configuration.Provider.ProviderBase System.Web.Security.MembershipProvider System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider System.Web.ClientServices.Providers.ClientWindowsAuthenticationMembershipProvider System.Web.Security.ActiveDirectoryMembershipProvider System.Web.Security.SqlMembershipProvider ASP.NET 成员资格阅读全文
posted @ 2011-10-19 10:49 GuYoung 阅读(861) 评论(2) 编辑
摘要: 接“ASP.NET Security Provider实现(一)” 为了实现MembershipProvider、RoleProvider、ProfileProvider,需要定义存储相关的实体类和业务逻辑相关的存储类。由于使用了MVCQuick.Framework的存储和IoC容器,实现了业务逻辑与持久化分离。阅读全文
posted @ 2011-10-18 15:26 GuYoung 阅读(577) 评论(0) 编辑
摘要: ASP.NET Provider 从ASP.NET2.0中,提供了各类的provider,有membership,role,profile等的,可以很方便地实现如角色,用户等管理,甚至不用自己写代码了。这些provider在ASP.NET 4.0、ASP.NET MVC中同样适用。阅读全文
posted @ 2011-10-18 08:57 GuYoung 阅读(1483) 评论(6) 编辑
摘要: log4net阅读全文
posted @ 2011-10-17 14:01 GuYoung 阅读(323) 评论(0) 编辑
摘要: ASP.NET MVC Filter action filter作为一个可以应用到controller action(或者是整个controller)上的属性(Attribute),改变action执行的行为。阅读全文
posted @ 2011-10-17 14:00 GuYoung 阅读(1450) 评论(0) 编辑
摘要: Common.Logging阅读全文
posted @ 2011-10-17 14:00 GuYoung 阅读(208) 评论(0) 编辑
摘要: Common.Logging Common.Logging是一个通用日志接口,具体实现可采用log4net、EntLib的日志、NLog等。 log4net log4net是一个第三方开源组件,它设计的主要目的是组合,生成日志信息,同时将配置保存到各种存储介质或者展现平台中,在实际项目中,Log4net 可以保存系统运行情况,可以在系统出现异常时,根据保存的日志信息,查看当时系统的状态。 log4net是Log4j的.NET版本,用C#编写,它与Log4j一样,具有可配置性灵活、线程安全、对日志的级别管理方便等优点。阅读全文
posted @ 2011-10-17 10:43 GuYoung 阅读(2701) 评论(0) 编辑
摘要: Spring.NET阅读全文
posted @ 2011-10-16 22:25 GuYoung 阅读(150) 评论(0) 编辑
摘要: 架构模式IoC阅读全文
posted @ 2011-10-16 22:22 GuYoung 阅读(153) 评论(0) 编辑
摘要: ControllerFactory ControllerFactory是基于路由的组件,它选择正确的controller并对其实例化。default factory会查找实现了IController并且以Controller结尾的类,然后通过反射使用无参构造函数进行实例化。 但如果您希望使用依赖注入,就不能再使用default factory,而必须使用支持IoC的controller factory。 使用支持IoC(依赖注入)的controller factory, 优点在于松耦合,可测试性很好。如果在Controller里面想要使用某些Service,要么new出来,要么用单例的形式,如UserService.Instance,这样想对Controller写单元测试都不容易,它和这些Service耦合太紧密,无法将这些Service替换成Stub实现。因此,松耦合是必须的。要实现这个功能,必须让依赖注入框架来创建Controller,才有可能注入依赖并组装对象。MVC里面有一个ControllerFactory的东西,可以使用来达到这个目的。阅读全文
posted @ 2011-10-16 22:19 GuYoung 阅读(1086) 评论(0) 编辑
摘要: IoC(Inversion of Control,控制反转) IoC别名DI(Dependency Injection,依赖注入)。Spring将IoC和DI看作等同的概念。 IoC是一种架构模式。 IoC其原理是基于OO设计原则的The Hollywood Principle(好莱坞原则):Don't call us, we'll call you(你不用找我们,我们会找你的),就是由容器来控制业务对象之间的依赖关系,而非传统实现中,由代码直接操控,这也就是所谓“控制反转”的概念所在,控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。控制权的转移带来的好处就是降低了业务对象之间的依赖程度。 Spring.NET Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。阅读全文
posted @ 2011-10-16 15:30 GuYoung 阅读(1498) 评论(1) 编辑
摘要: NHibernate阅读全文
posted @ 2011-10-15 19:16 GuYoung 阅读(669) 评论(0) 编辑
摘要: 架构模式ORM阅读全文
posted @ 2011-10-15 19:11 GuYoung 阅读(332) 评论(0) 编辑
摘要: 架构模式Repository阅读全文
posted @ 2011-10-15 19:06 GuYoung 阅读(416) 评论(0) 编辑
摘要: MVCQuick的Repository实现特点:   1、实体类与仓储类真正实现分离;   2、可以支持多种数据库;   3、通过.Net反射技术,每个实体对象自动产生映射文件;   4、单元测试实现简单。阅读全文
posted @ 2011-10-15 16:04 GuYoung 阅读(1447) 评论(0) 编辑
摘要: 使用NHibernate 3.2实现Repository(ORuM)(二)、使用NHibernate 3.2实现Repository(ORuM)(三)介绍了使用NHibernate 3.2 Mapping-By-Code实现Repository的方法,Mapping-By-Code相比手工编写xml映射文件HBM的方法更为简便、流畅。 但本实现方法的核心是“ORuM(Object Relational un-Mapping))”,即利用实体、值对象定义实现自动生成HbmMapping,使仓储对象更像个真正意义上的实体对象仓库。只要把实体对象放进仓库,就能拿得出来,无须关注更多细节,只需定义一个仓储对象而已。 IRepository genreRepository = new NHibernateRepository(session);genreRepository.Save(genre);IList genreList = genreRepository.FindAll(); NHibernate对Mapp阅读全文
posted @ 2011-10-07 22:04 GuYoung 阅读(1928) 评论(2) 编辑
摘要: NHibernate使用时通常是先定义实体类,再为实体类映射数据库关系,NHibernate映射是使用XML文件形式的。 当我们Confrontation NHibernate时Mapping的过程:   解析读取Mapping文件   将Mapping文件反序列化(Deserialize)为XmlDeserialized(就是NHibernate.Cfg.MappingSchema.HbmMapping类)   将HbmMapping类Bind为元数据映射(Mapping-MetaDate),(就是NHibernate.Cfg.Mappings类)   Build SessionFactory NHibernate映射文件生成方式:   手动编写XML方式   工具软件生成   NHibernate.Mapping.Attributes    NHibernate3.2版本集成Mapping-By-Code(代码映射),其设计思想来源于ConfORM,代码整体构思基于"Loquacious"模式,而不是"fluent-interface"。在NHi阅读全文
posted @ 2011-10-06 16:42 GuYoung 阅读(1988) 评论(1) 编辑
摘要: 领域驱动设计(简称 DDD) 的提出是由Eric Evans在其《Domain-Driven Design –Tackling Complexity in the Heart of Software》(中文译名:领域驱动设计—软件核心复杂性应对之道)一书提出。 领域驱动设计事实上是针对OOAD的一个扩展和延伸,DDD基于面向对象分析与设计技术,对技术架构进行了分层规划,同时对每个类进行了策略和类型的划分。 领域模型是领域驱动的核心。采用DDD的设计思想,业务逻辑不再集中在几个大型的类上,而是由大量相对小的领域对象(类)组成,这些类具备自己的状态和行为,每个类是相对完整的独立体,并与现实领域的业务对象映射。领域模型就是由这样许多的细粒度的类组成。基于领域驱动的设计,保证了系统的可维护性、扩展性和复用性,在处理复杂业务逻辑方面有着先天的优势。 领域驱动设计的分层架构分为四层,其核心就是领域层(Domain),所有的业务逻辑应该在领域层实现,具体描述如下:   用户界面/展现层:负责向用户展现信息以及解释用户命令。   应用层:很薄的一层,用来协调应用的活动。它不包阅读全文
posted @ 2011-10-05 15:28 GuYoung 阅读(2243) 评论(3) 编辑
摘要: Repository(仓储、资源库)模式定义:一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合(《领域驱动设计:软件核心复杂性应对之道》);通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调(《企业应用架构模式》)。 使用Repository模式的最大好处就是将领域模型从客户代码和数据映射层之间解耦出来。 NHibernate 3.2 GA 正式版于 2011-07-30 发布,这一版本对 CodeFirst 的支持性更好了,因为它提供了 Conformist 取代之前第三方的 ConfOrm。 NHibernate 3.2的mapping by code有三种方式:1、直接为每个entity类调用ModelMapper.Class方法;2、Conformist映射,也就是class by class;3、Convention,当然约定是可以被explicit mapping所覆盖的。 本方法实现Repository特点:1、实体类与仓储类真正实现分离;2、可以支持多种数据库;3、通过.Net反射技术,每个实体对象自动产生映射文件;4、阅读全文
posted @ 2011-10-03 10:20 GuYoung 阅读(2140) 评论(3) 编辑