1、.NET中设计模式的使用,设计模式介绍,设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。,三层架构,三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。,三层架构,、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 、数据访问层(DAL):该层所做事务直接操作数
2、据库,针对数据的增添、删除、修改、更新、查找等。,三层架构优点与缺点,优点1、开发人员可以只关注整个结构中的其中某一层; 2、可以很容易的用新的实现来替换原有层次的实现; 3、可以降低层与层之间的依赖; 4、有利于标准化; 5、利于各层逻辑的复用。,三层架构优点与缺点,缺点 1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。,mvc,
3、MVC,是模型(Model),视图(View)和控制(Controller)的缩写。其目的实现Web系统的职能分工。其中Model层实现系统中的业务逻辑,View层用于与用户的交互,Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。-资料来源:百度百科,MVC三层架构,mvc,MVC开始是存在于Desktop程序中的,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,
4、一旦M改变,V应该同步更新。,MVC三层架构,MVC模式优点,1、松耦合。视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。2、重用性高。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型3、生命周期成本低。MVC使开发和维护用户接口的技术含量降低。4、可维护性高。分离视图层和业务逻辑层也使得WEB应用更易于维护和修改5、有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。,缺点,1、增加了系
5、统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。4、目前,一般高级的界面工具或构造器不支持MVC架构。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。,ASP.
6、NET MVC,A MVC 是微软官方提供的MVC模式编写A Web应用程序的一个框架,它由Castle的MonoRail而来.目前已经历经数个版本,最新版本为4.0。-ASP.NET官方网站开发人员可以用MVC设计模式来构建Web应用,做到清晰的概念分离(UI或者视图与业务应用逻辑分离, 应用逻辑和后端数据分离),同时还可以使用测试驱动开发。,ASP.NET MVC 特色与优点,特色:1、分离任务(输入逻辑,业务逻辑和显示逻辑),易测性和默认的测试驱动组件。所有mvc用到的组件都是基于接口并且可以被mock对象测试到,你可以不必在进程中运行controller就可以使用测试。使得测试更加快速
7、和简捷。2、可扩展的简便的框架。mvc框架被设计用来更轻松的移植和定制功能。你可以加入自己的视图引擎,url重写策略。3、强大的url重写机制让你更方便的建立容易理解和可搜索的url。url可以不包含任何文件扩展名,并且可以重写url使其对搜索引擎更加友好。4、支持现有程序。,ASP.NET MVC 特色与优点,优点:1.通过把项目分成model view和controller,使得复杂项目更加容易维护。2.没有使用view state和服务器表单控件,可以更方便的控制应用程序的行为3.应用程序通过controller来控制程序请求,可以提供丰富的url重写。4.对单元测试的支持更加出色。5.
8、在团队开发模式下表现更出众。,IOC 控制反转(1),控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。IOC也是一种设计模式。IOC模式中,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。.net中比较有名的IOC容器包括Castle、 Spring.NET、 ObjectBuilder 以及StructureMap、Au
9、tofac 等,IOC 控制反转(2),我们设计的分层架构,层与层之间应该是松散耦合的。因为是单向单一调用,所以,这里的“松散耦合”实际是指上层类不能具体依赖于下层类,而应该依赖于下层提供的一个接口。这样,上层类不能直接实例化下层中的类,而只持有接口,至于接口所指变量最终究竟是哪一个类,则由依赖注入机制决定。例如:注入规则cfg.For(typeof(IService).HttpContextScoped().Use(typeof(ServiceBase);之所以这样做,是为了实现层与层之间的“可替换”式设计,例如,现在需要换一种方式实现数据访问层,只要这个实现遵循了前面定义的数据访问层接口,
10、业务逻辑层和表示层不需要做任何改动,只需要改一下配置文件系统即可正常运行。另外,基于这种结构的系统,还可以实现并行开发。即不同开发人员可以专注于自己的层次,只有接口被定义好了,开发出来的东西就可以无缝连接。,Unit Of Work模式,Unit Of Work(工作单元)模式在ASP.NET MVC 的范例项目中经常用到,是比较受欢迎的一个模式。什么是Unit Of Work模式呢?“A Unit of Work keep track of everything you do during a business transaction that can affect the database
11、. When youre done, it figures out everything that need to be done to alter the database as a result of your work.”Unit of Work负责跟踪所有业务事务过程中数据库的变更。当事务完成之后,它找出需要处理的变更,并更新数据库。,Repository模式,在领域驱动设计:软件核心复杂性应对之道中,译者将Repository翻译为仓储,给出如下说明:一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合。使用该模式的最大好处就是将领域模型(domain model)从客户代码和数据映射层之间解耦出来。,DDD 领域驱动设计,领域驱动设计(Domain-Driven Design)的提出是由Eric Evans在其领域驱动设计一书提出。实质上是一种由内而外的设计方法,俗话说的先中间(模型和服务)后两边(界面,数据库以及集成)。前面提到的domain model领域模型即是DDD设计的一个方面。领域驱动设计中的领域服务属于Unit Of Work 模式。,一个例子,