葡京娱乐总站平台世界模型(DomainModel)与视图模型(ViewModel)

   
Model-View-Controller(模型-视图-控制器,MVC)模式将您的软件组织并解释变成三只全不同的角色:

     ASP.NET
MVC是微软公司的同样缓慢WEB开发框架,整合了“模型-视图-控制器”架构的全速和清洁,是全速开发极现代的思维及技术。它是风ASP.NET
WebForm的一个周到的替代品。

  • Model
    封作了公的行使数据、应用流程以及事务逻辑。
  • View
    从 Model 获取数据并格式化数据以拓展展示。
  • Controller
    控制程序流程,接收输入,并拿她传递让 Model 和 View。

1、当今的Web开发

   
与任何设计模式不同,MVC
模式并没直接体现一个您能够编写或配备的类组织。相反,MVC
更如一个概念上的点拨标准要范型。概念上之 MVC 模式于叙为老三单对象 ——
Model、View 和 Controller —— 之间的涉嫌。由于 View 和 Controller
都得以从 Model 请求数据,所以 Controller 和 View 都指
Model。任何输入还经 Controller 进入而的网,然后 Controller 选择一个
View 来发生结果。

    
1)REST(Representational State
Transfer)已经变成应用程序在HTTP上互操作的机要系架构,完全使SOAP失色。REST是依据代表真实世界实体的资源(URI)和代表以这些资源及可用的规范操作方法(HTTP方法)来讲述一个应用程序。通过HTTP方法与资源地址的组成就可对资源执行相应的操作,这种重组就是REST,执行这种操作的要也称之为REST化的请求。(对于REST的接头个人还是匪透,后面会指向斯概念进行上)

    Model
包含了您的应用逻辑和数目,在你的应用程序中,它很可能是着重的值驱动器。Model
没有其余和见层相关的性状,而且也和 HTTP
请求处理职责被全无关。

时下的Web应用程序不只是提供HTML服务,通常也需拿XML或JSON数据提供被用户,而WebForm很为难支撑。

    Domain
Model
是一个目标层,是对实际世界逻辑、数据及公应用程序所拍卖的题目之悬空。

    
2)整个软件行业向着敏捷和测试驱动开发方向的前进,如单元测试工具(NUnit、xUnit)、模仿框架(Moq、Rhino、Mocks)、控制反转容器(Ninject、AutoFac)、持续集成服务器(CruiseControl、TeamCity)、对象关联映射器(NHibernate、Subsonic、EF、Dapper、Petapoco)、UI自动化工具的供。(测试驱动开发TDD思想:首先描述想如果取得的表现范例,称为测试规范;然后开展软件设计,这样经过履行依附于这无异实现之同一效仿测试,来说明应用程序的平稳以及不易

    Domain
Model 可分为两很接近:Simple Domain Model 和 Rich Domain Model。

    
3)顺应Web标准与REST化的大方向。

  • Simple Domain Model
    往往是工作对象同数目库表之间一对一底通信。你既呈现了之几乎种植模式 ——
    Active Record、Table Data Gateway,以及 Data
    Mapper,所有这些同数据库相关的设计模式 ——
    可以拉你把同数据库相关的逻辑组织成为一个 Domain
    Model。
  • Rich Domain
    Model 包含复杂的,使用持续机制紧密联系在共的靶子网络,在本书及 GoF
    一写中牵线的无数模式于在杠杆作用。Rich Domain Models
    往往是柔性的,精心测试了之,不断重构的,而且与它们所发挥的世界所急需的作业逻辑严密耦合。

2、ASP.NET WebForm的史及题材

   
采用哪种 Domain
Model 类型取决于你的应用环境。如果您正成立的是一个非常简单的表单处理
web 应用,没必要建立 Rich Domain
Model。然而,如果你正编纂一个价值数百万的商号外联网架构的为主库,那么拼命付出一个
Rich Domain Model
就是值得的,它好为而提供一个可靠表达业务经过的阳台,并得以为您快传输数据。

    
ASP.NET WebForm的技巧堆栈,如下图所示:

    Martin
Fowler 在 PoEAA 中又概括介绍了区区种 Domain Model。而 Eric Evans 的
Domain Driven Design 一题,则完全专注于 Rich Domain Model
的履以与支出过程。

    

    View
用于拍卖所有表现层方面的题材。View 从 Model
获取数据,并可把它格式化成用于 web 页的 HTML,用于 web 服务的
XML,或用来 email 的文本。

    
此图的意思是WebForm建立以ASP.NET之上,而ASP.NET又建以.NET平台之上,MVC框架所从的企图是代WebForm。

   
许多之MVC模式之实现吗都应用一个View Model或Application
Model的概念,Controller是关联的媒婆,架由世界模型与用户界面里的桥,属于表现层。以View的简单性,Controller负责处理要以世界模型转换成一个View
Model,这一般号称数据传对象(DTO)

    
WebForm的计划性思想是,让Web开发以发上和Windows
Form开发同。开发者不再用以同一多级独立的HTTP请求和响应进行工作,可以当其是千篇一律种状态化的UI,人们可淡忘WEB及其无状态本质,转而用一种植“拖–放”式设计器来创造UI,并设想所有工作都起在服务器上。

    DomainModel != ViewModel

    
乘胜时空之延期,WebForm在实际项目中起了有些瑕疵:

   
DomainModel代表在相应的域,但ViewModel却是吗View的待而创办。这两者之间或许(一般情况下都)是殊的,此外DomainModel是多少增长行为之组合体,是由于复杂的变量类型组成的以有所层次。而ViewModel只是由于有String等简易变量类型组成。如果想移除冗余并且爱招差的ORM代码,可以用AutoMapper.如果想如果了解又多。

    
1)视图状态重负:维护状态的其实机制,也就是ViewState(视图状态)导致在客户端和服务器之间传输大块数据(达到几百KB),而且来回于每次要中,导致响应时间大缓慢,增加了服务器的带来富需求;

   
这就是说领域模型(Domain Model
)和视图模型(View Model)有啊两样呢?

    
2)页面生命周期:连接客户端与劳动器端事件处理器代码的机制好复杂,对于应用程序运行中生为难展开保护;

   
在ASP.NET MVC的应用程序中不时得得看来View
Model,经常我们还看世界模型与视图模型是与一个物。这特别是将世界模型包含在多少传对象DTO里的下,例如利用Entity
Framework之类的ORM工具转的实体。在这种情形下,领域模型与视图模型包含的实业非常相似,都是一些简单的CRUD操作。

    
3)关注分离之一无是处看法:本身将代码从HTML提取出来,放到后台代码类吃开展处理是生雷同种植很好之办法,但是部分开发者在后台代码中将展现代码和应用工作逻辑混合在一起,导致最终代码乱并难以维护;

   
这些实体有无数性能,有同样或者类似之称谓,你可以老易地映射领域实体对应视图模型中的一个特性。不过,这些相似之习性也或略有不同,例如类型或者格式。例如,用户填写的用户界面的一个性质,他以视图模型里也许是一个“Nullable”的。

    
4)HTML的受限控制:服务器控件将团结渲染成HTML,但连无是所期待见到底HTML,在ASP.NET
4之前,并无克好好之应用CSS。同时会生成不可预知或复杂的ID,这样JavaScript就颇麻烦展开走访。

   
另一方面,领域实体可能要一个经过认证的官方的价,所以要一个在用户界面的天地模型中的转换。另一个例证是,用户界面可能会见来得一个滑块,用于用户选择多少天之后提交他的订单。在这种景象下,视图模型或采用一个整数特性来代表,领域模型通常是一个日期值。

    
5)有瑕疵的虚幻:WebForm试图尽量隐去HTML和HTTP(这是通过WebForm的悬空层实现的)。当您实现自己之法门时,需要放弃这种肤浅,迫使采取回发事件机制的逆向工程。所以这种肤浅对于开发者而言即结一个巨大的阻力以及挑战;

   
视图模型通常只是包含领域模型的一个子集,而且只含界面及所急需的性质。此外,视图模型或是一个领域模型树的扁平版,例如,一个Customer实体有一个Address,而当时还要是一个完,它富含街道地址,邮政编码,国家等。一个Customer
视图模型用于展示数据,将地点数据拉平填充到视图模型类里。

    
6)低可测试性:WebForm的这种紧耦合体系布局并无吻合吃单元测试,对于集成测试为格外富有挑战性;

   
此外要一个View需要以处理几乎独世界模型,View
Model就是立即几只Domain
Model的总额。领域模型和视图模型中产生成百上千般之地方,我们常常干脆就将Domain
Model当作View Model来使了。
   
上面讨论了世界模型与视图模型的相似性,我们来探都出几栽艺术把世界模型转换为视图模型,通常发生3栽方式:

3、ASP.NET
MVC的特点

  • 管世界模型作视图模型来用,也不怕是圈子模型就是视图模型,大部分且是这么用之。
  • 视图模型中含有一个领域模型,定义一个视图模型,里面含有了一个天地模型,通过性能方式进行走访。
  • 以世界模型映射到视图模型,领域模型并从未直接照射到视图模型,需要处理这种映射关系。

    
1)ASP.NET
MVC框架实现了MVC模式(MVC模式于1978年尽管已经提取出来了),由于ASP.NET
MVC极大的精益求精了关爱分离,所以特地适用于Web应用程序。因为跟MVC应用程序的互遵循着用户动作和视图更给之当周期,在斯周期被,假设视图是无状态的。这与支持Web应用程序的HTTP请求和响应措施大适合。

   
我们无建议直接将世界模型实体暴露被视图,因为有成百上千微薄之远在,可能致您混合业务和代表层的逻辑,无论是领域实体的性质显示还是业务的验证规则,这都是应用程序处理的异方面。

    
2)可扩展性,MVC框架被构建成一样系列独立的零部件,如路由于系统、视图引擎、控制器工厂,你得充分容易地用一个谈得来的不同实现来替换这些零件,通常发生三栽选择:

   
直接拿公的圈子模型作Conroller上之处理参数面临着平安风险,因为Controller或者Model
binder必须保证属性验证和用户不能够修改它好非克改改的属性(例如,用户手动更新了一个伏的输入值,或追加一个额外的属于性值,而以此并无是界面及之要素,但也刚好领域模型实体的性能,这种高风险叫做“over-posting”),即使对脚下版的圈子模型做了天经地义的证明,领域模型前恐怕做了改修改,并没有起编译错误或警示,可能导致新的高风险。
   
咱俩应该避免使用前少栽方式将世界模型转换成视图模型,推荐使用第三种方式,定义单独的视图模型类。召开这种领域模型到视图模型的变换工作是一模一样种植重复性的做事,已经起几乎只器得以帮您来就这项工作。最常用之一个家伙就是.NET
社区的开源项目AutoMapper。

         
a、使用组件现行的默认实现,此种植可以满足大多数应用程序;

 (民用知道:针对域模型与视图模型,有时候要看现实的作业场景,一般情形下可随上述将DomainModel和ViewModel进行多少映射,以避免有些安全性问题;但是呢可将DomainModel当成ViewModel来以啊是足以的,通过当系贯彻、业务逻辑操作及判及是得保工作安全性的。就是前者为如开展判定坐确保安全性。所以,还是看现实工作体系的采取环境暨要求来控制动用哪种办法来兑现。

         
b、派生默认实现之一个子类,以调动其一言一行;

 

         
c、用接口或者抽象基类的一个初的落实来完全替换该零件;

文章转载自:http://www.cnblogs.com/shanyou/archive/2010/04/03/1703501.html

    
3)HTML和HTTP上之严密控制,ASP.NET
MVC会发生整洁和标准相当的号,其置于的HTML辅助器方法,可以生与正统相当的输出。ASP.NET
MVC生成的页面不带有其他ViewState数据,这种针对带宽的节,可以大幅度的改良用户之体会,并且可以本着浏览器和服务器之间传递的请加以控制。

    
4)可测试性,ASP.NET
MVC应用程序不仅可开展单元测试,还好跟UI自动化测试工具良好合作。

    
5)强大的路由系统,采用REST风格的路由方案,有如下好处:

    
     a、搜索引擎对URL中找到的要词有强烈的权重,对同样的重要性词之检索,极生或会见转接一个较为简单的URL地址;

         
b、许多Web用户现在对URL有足够的会心,并且愿意当浏览器的地点栏目中输入URL地址;

         
c、当知道URL地址的布局后,人们才会重发出或链接它,并通往其他人共享;

         
d、此种URL结构并无会见以应用程序的技术细节、文件夹、文件名称等结构暴露于互联网。对于底层实现可无限制修改,而休会见摔链接;

    
6)建立在ASP.NET平台之上,一方面ASP.NET
MVC是基于.NET平台的,因此可以灵活的运用任何.NET语言来编排代码,可以以大的.NET类库和大量之老三方.NET类库系统;另一方面,已经形成的ASP.NET平台特色,如认证、成员、角色、配置文件、国际化等足以减小开支暨保安Web应用程序所待之代码量。

    
7)ASP.NET MVC是针对.NET
4.X假设立之,因此它们的API可以充分利用当前语言与运作时之更新,如await关键字、扩展方法、lambda表达式、匿名、动态类型、LINQ。

    
8)ASP.NET MVC是开源的。

4、ASP.NET
MVC与ASP.NET WebForm的比较

    
首先要验证的凡,虽然ASP.NET MVC相对于ASP.NET
WebForm来说有一些优势,但立刻并无意味前者要替代后者,也无意味着后者要付诸东流。

  • WebForm的传统是,UI应该是状态化的,其结果是,在HTTP和HTML之上添加一个抽象层,用视图状态(ViewState)和回发(Postback)来创造状态化的职能。这是一样栽“拖放”式Windows
    Form风格的支付。

  • MVC采纳了HTTP真正无状态的本来面目。MVC框架要求用户知道Web应用程序实际的劳作措施,在知道的前提下,进行保护和扩充,提供平等种功能强大、简单的、整洁的、现代的方法来修Web应用程序,摆脱复杂的克。

  • 故说,开发小型的,企业内部型应用程序,可以设想用WebForm的法来落实,但再多的当儿,开发互联网应用程序或者大型的应用程序时,MVC无论从效率、兼容性、维护性都是同样种更好之选项。

参考资料:《精通ASP.NET MVC X》