澳门永利备用网址概念上的 MVC 格局被描述为八个对象 ——,概念上的 MVC 形式被描述为多少个指标 ——

   
Model-View-Controller(模型-视图-调控器,MVC)方式将您的软件社团并分解成多少个精光差别的角色:

Model-View-Controller(模型-视图-调节器,MVC)
格局将您的软件组织并分解成八个完全差别的剧中人物:

  • Model
    封装了您的选拔数据、应用流程和作业逻辑。
  • View
    从 Model 获取数据并格式化数据以拓展体现。
  • Controller
    调控程序流程,接收输入,并把它们传递给 Model 和 View。
  • Model 封装了你的施用数据、应用流程和工作逻辑。

  • View 从 Model 获取数据并格式化数据以拓展显示。

  • Controller 调节造进度序流程,接收输入,并把它们传递给 Model 和 View。

   
与其他设计情势差别,MVC
情势并未有一向反映多个您可见编写或配备的类协会。相反,MVC
更像一个概念上的点拨原则或范型。概念上的 MVC 格局被描述为三个对象 ——
Model、View 和 Controller —— 之间的关联。由于 View 和 Controller
都足以从 Model 请求数据,所以 Controller 和 View 都依附Model。任何输入都通过 Controller 进入你的系统,然后 Controller 选拔叁个View 来发生结果。

与别的设计方式区别,MVC
格局并未直接浮现一个您可见编写或配备的类组织。相反,MVC
更像一个定义上的点拨原则或范型。概念上的 MVC 格局被描述为四个对象 ——
Model、View 和 Controller —— 之间的关联。由于 View 和 Controller
都足以从 Model 请求数据,所以 Controller 和 View 都依赖Model。任何输入都经过 Controller 进入你的种类,然后 Controller 选取三个View 来发出结果。

    Model
包蕴了您的应用逻辑和数码,在你的应用程序中,它很或然是任重(Ren Zhong)而道远的值驱动器。Model
未有别的与表现层相关的特色,而且也和 HTTP
请求管理任务中全然毫无干系。

Model
包括了您的应用逻辑和数量,在你的应用程序中,它很大概是关键的值驱动器。Model
未有其余与表现层相关的风味,而且也和 HTTP 请求管理职责中全然无关。

    Domain
Model
是三个目标层,是对现实世界逻辑、数据和你应用程序所拍卖的主题材料的肤浅。

Domain Model
是多个对象层,是对切实世界逻辑、数据和您应用程序所处理的难点的架空。Domain
Model 可分为两大类:Simple Domain Model 和 Rich Domain Model。

    Domain
Model 可分为两大类:Simple Domain Model 和 Rich Domain Model。

Simple Domain Model
往往是职业对象和多少库表之间一对一的通讯。你早已见过的两种形式 —— Active
Record、Table Data Gateway,以及 Data
Mapper,全部那些与数据库相关的设计格局 ——
能够援助你把与数据库相关的逻辑协会成一个 Domain Model。

  • Simple Domain Model
    往往是职业对象和数码库表之间一对一的通讯。你早就见过的两种方式 ——
    Active Record、Table Data Gateway,以及 Data
    Mapper,全体这么些与数据库相关的设计情势 ——
    能够协助您把与数据库相关的逻辑组织成三个 Domain
    Model。
  • Rich Domain
    Model 包罗复杂的,使用持续机制紧凑联系在一道的指标网络,在本书和 GoF
    一书中牵线的过多格局起着杠杆作用。Rich Domain Models
    往往是柔性的,精心测试过的,不断重构的,而且与它们所发挥的天地所需的思想政治工作逻辑严密耦合。

Rich Domain Model
包涵复杂的,使用持续机制紧凑联系在一道的靶子互连网,在本书和 GoF
一书中牵线的众多形式起着杠杆效率。Rich Domain Models
往往是柔性的,精心测试过的,不断重构的,而且与它们所发表的领域所需的业务逻辑严密耦合。

   
采用哪个种类 Domain
Model 类型取决于你的应用意况。假若您正在创设的是八个特别轻松的表单管理web 应用,没供给建设构造 Rich Domain
Model。然则,假若您正在编辑一个价值数百万的商场内联网架构的主干库,那么拼命开荒三个Rich Domain Model
正是值得的,它可感觉你提供四个准儿表达业务经过的平台,并得以令你快捷传输数据。

利用哪类 Domain Model
类型取决于你的应用情状。假设您正在创立的是三个极度简单的表单管理 web
应用,没须要构建 Rich Domain
Model。不过,若是您正在编纂一个价值数百万的商家内联网框架结构的基本库,那么拼命开辟一个Rich Domain Model
便是值得的,它可感到你提供三个确切表明业务经过的平台,并得以让您火速传输数据。

    MartinFowler 在 PoEAA 中并且省略介绍了二种 Domain Model。而 埃里克 埃文思 的
Domain Driven Design 一书,则统统专注于 Rich Domain Model
的执行应用和支出进度。

马丁 Fowler 在 PoEAA 中并且回顾介绍了二种 Domain Model。而 埃里克 Evans的 Domain Driven Design 一书,则统统专注于 Rich Domain Model
的施行应用和付出进度。

    View
用于拍卖全数表现层方面包车型大巴标题。View 从 Model
获取数据,并得以把它格式化成用于 web 页的 HTML,用于 web 服务的
XML,或用于 email 的文本。

View 用于拍卖全部表现层方面包车型地铁难点。View 从 Model
获取数据,并得以把它格式化成用于 web 页的 HTML,用于 web 服务的
XML,或用于 email 的文书。

   
好些个的MVC方式的兑现也都接纳三个View Model或Application
Model的定义,Controller是关联的媒介,架起世界模型和用户分界面之间的大桥,属于表现层。为了View的轻便性,Controller肩负管理照旧将世界模型转变来一个View
Model,这一般称为数据传输对象(DTO)

众多的MVC情势的兑现也都使用二个View Model或Application
Model的定义,Controller是维系的红娘,架起世界模型和用户分界面之间的桥梁,属于表现层。为了View的轻便性,Controller肩负管理依旧将世界模型转换到一个View
Model,这一般称为数据传输对象(DTO)。

    DomainModel != ViewModel

<译>10个asp.net
MVC最好施行
针对Model的最棒实施有诸如此类一段:

   
DomainModel代表着相应的域,但ViewModel却是为View的内需而成立。这两个之间也许(一般景色下都)是不相同的,其余DomainModel是数码拉长行为的组合体,是由复杂的变量类型组成的同有的时候间有着等级次序。而ViewModel只是由局部String等简单变量类型组成。假使想移除冗余并且轻易导致出错的ORM代码,能够运用AutoMapper.如果想要了然越来越多。

7–DomainModel != ViewModel

 *DomainModel代表着相应的域,但ViewModel却是为View的供给而创设。这两个之间或者(一般意况下都)是见仁见智的,别的DomainModel是数据增进行为的组合体,是由复杂的变量类型组成的还要具备档案的次序。而ViewModel只是由一些String等简易变量类型组成。借使想移除冗余并且轻巧形成出错的ORM代码,能够应用[AutoMapper](http://www.codeplex.com/AutoMapper).借使想要理解越来越多,作者引入阅读:[ASP.NET
MVC View Model
Patterns](http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx).*

那就是说领域模型(Domain Model )和视图模型(View Model)有怎样两样吧?

在ASP.NET MVC的应用程序中时常能够能够看来View
Model,平常大家都觉着世界模型和视图模型是同一个事物。那非常是把世界模型包涵在数据传输对象DTO里的时候,比如使用Entity
Framework之类的ORM工具生成的实体。在这种状态下,领域模型和视图模型包蕴的实体特别相似,都是部分简易的CRUD操作。

这几个实体有过多属性,有同等或类似的称呼,你可以很轻便地映射领域实体对应视图模型中的壹天性质。可是,那么些相似的性质也只怕略有分歧,举例类型或许格式。举例,用户填写的用户分界面包车型地铁一个属性,他在视图模型里恐怕是一个“Nullable”的。另一方面,领域实体大概必要多少个通过验证的官方的值,所以须求五个在用户分界面的领域模型之间的转换。另三个事例是,用户分界面只怕会议及展览示多少个滑块,用于用户挑选多少天过后提交他的订单。在这种情状下,视图模型恐怕选择二个大背头属性来表示,领域模型日常是三个日期值。

视图模型常常只含有领域模型的二个子集,而且只包蕴分界面上所急需的属性。别的,视图模型也许是二个世界模型树的扁平版本,举例,多个Customer实体有贰个Address,而那又是叁个完好无损,它含有街道地址,邮编,国家等。三个Customer
视图模型用于呈现数据,将地点数据拉平填充到视图模型类里。

此外借使贰个View须求同一时间管理多少个世界模型,View Model就是那多少个Domain
Model的总量。领域模型和视图模型之间有众多一般的地方,大家平时干脆就把Domain
Model当作View Model来使用了。

下边探讨了世界模型和视图模型的相似性,大家来看望都有二种艺术把世界模型转变为视图模型,常常有3种情势:

  1. 把世界模型当作视图模型来用,也正是世界模型正是视图模型,超越四分之二都以那般用的。
  2. 视图模型里面富含贰个世界模型,定义叁个视图模型,里面包涵了叁个领域模型,通过品质格局开始展览走访。
  3. 将世界模型映射到视图模型,领域模型并从未一贯照射到视图模型,须求管理这种映射关系。

我们不提出直接把世界模型实体暴光给视图,因为有大多微小之处,恐怕引致您混合业务和表示层的逻辑,无论是领域实体的性子展现依然政工的表明规则,这都以应用程序管理的不等地点。直接将你的世界模型作为Conroller上的拍卖参数面对着平安风险,因为Controller也许Model
binder必须确认保证属性验证和用户不能够修改她要好不能够改改的天性(比如,用户手动更新了二个潜藏的输入值,或追加二个附加的属性值,而以此并不是分界面上的因素,但却恰巧领域模型实体的性质,这种危害叫做“over-posting”),就算对现阶段版本的小圈子模型做了不错的求证,领域模型现在恐怕做了退换修改,并不曾出现编写翻译错误大概警告,大概变成新的风险。

大家理应制止选择前二种办法将世界模型转变来视图模型,推荐应用第三种艺术,定义单独的视图模型类。做这种领域模型到视图模型的转移职业是一种重复性的行事,已经有多少个工具得以协理您来实现那项职业。最常用的二个工具正是.NET
社区的开源项目AutoMapper

 

怎么利用AutoMapper可以参照他事他说加以考察下边包车型地铁两篇文章介绍:

AutoMapper Formatters are Cool – ASP.NET MVC
Style

AutoMapper in NerdDinner

   
这正是说领域模型(Domain Model
)和视图模型(View Model)有如何差异呢?

   
在ASP.NET MVC的应用程序中平日能够能够看到View
Model,平时大家皆感觉世界模型和视图模型是同八个事物。那非常是把世界模型包蕴在数量传输对象DTO里的时候,举例利用Entity
Framework之类的ORM工具生成的实体。在这种情状下,领域模型和视图模型包括的实业极度相像,都是部分简练的CRUD操作。

   
这一个实体有广大性质,有同样或周围的名目,你能够很轻巧地映射领域实体对应视图模型中的二个属性。但是,那么些相似的性情也可能略有不相同,举个例子类型或然格式。举个例子,用户填写的用户分界面包车型地铁叁性格情,他在视图模型里或者是两个“Nullable”的。

   
另一方面,领域实体或许需求一个通过证实的法定的值,所以需求叁个在用户分界面包车型大巴园地模型之间的调换。另多个例证是,用户分界面大概会议及展览示一个滑块,用于用户挑选多少天之后提交他的订单。在这种情状下,视图模型或者选拔一个大背头天性来表示,领域模型平时是多少个日期值。

   
视图模型常常只含有领域模型的多个子集,而且只含有界面上所必要的性质。别的,视图模型恐怕是贰个领域模型树的扁平版本,举例,二个Customer实体有两个Address,而那又是四个完好,它富含街道地址,邮编,国家等。三个Customer
视图模型用于显示数据,将地点数据拉平填充到视图模型类里。

   
其余如果二个View需求同期管理多少个世界模型,View
Model正是那多少个Domain
Model的总额。领域模型和视图模型之间有好多貌似的地点,大家平日干脆就把Domain
Model当作View Model来采纳了。
   
上边商量了世界模型和视图模型的相似性,大家来探望都有两种办法把世界模型转变为视图模型,平时有3种艺术:

  • 把世界模型当作视图模型来用,也正是圈子模型正是视图模型,半数以上都以如此用的。
  • 视图模型里面富含三个领域模型,定义一个视图模型,里面含有了贰个天地模型,通过品质格局开始展览访问。
  • 将世界模型映射到视图模型,领域模型并从未一贯照射到视图模型,要求管理这种映射关系。

   
大家不建议直接把世界模型实体揭示给视图,因为有无数细小之处,大概导致你混合业务和表示层的逻辑,无论是领域实体的本性展现依旧政工的表达规则,那都以应用程序管理的不等地点。

   
间接将您的小圈子模型作为Conroller上的处理参数面对着安全风险,因为Controller可能Model
binder必须保险属性验证和用户不能够改改她自身不可能修改的质量(比如,用户手动更新了贰个隐身的输入值,或扩充多少个卓殊的属性值,而那几个并不是分界面上的要素,但却刚好领域模型实体的天性,这种高风险叫做“over-posting”),就算对这段日子版本的天地模型做了科学的辨证,领域模型现在也许做了变动修改,并从未出现编写翻译错误可能警示,也许导致新的高风险。
   
我们应当制止选择前两种办法将世界模型转变到视图模型,推荐使用第三种艺术,定义单独的视图模型类。做这种领域模型到视图模型的转移职业是一种重复性的办事,已经有多少个工具得以扶持你来形成那项专门的学业。最常用的一个工具就是.NET
社区的开源项目AutoMapper。

 (个体领会:针对域模型与视图模型,不经常候需求看现实的政工场景,一般景色下得以依据上述将DomainModel和ViewModel举行数量映射,以制止有个别安全性难点;然则也得以将DomainModel当成ViewModel来利用也是足以的,通过在系统完成、业务逻辑操作和判断上是足以确认保证工作安全性的。就是前者也要拓展推断以管教安全性。所以,依然看具体作业种类的运用条件与必要来决定动用哪一类艺术来贯彻。

 

作品转发自:http://www.cnblogs.com/shanyou/archive/2010/04/03/1703501.html