Model从表现层分离领域模型,领域模型葡萄娱乐场

   
那个实体有过多性质,有一样或近似的名目,你能够很轻便地映射领域实体对应视图模型中的二个属性。但是,那个相似的个性也只怕略有分化,比方类型或然格式。比如,用户填写的用户分界面包车型客车三个特性,他在视图模型里可能是二个“Nullable”的。

使用哪一类 Domain Model
类型取决于你的应用遭遇。假如您正在创立的是多少个极其轻便的表单管理 web
应用,没供给营造 Rich Domain
Model。然而,假使您正在编写制定贰个股票总值数百万的公司内联网架构的中坚库,那么拼命开采三个Rich Domain Model
就是值得的,它可认为你提供三个确切表明业务经过的平台,并得以让您火速传输数据。

   
大多的MVC方式的兑现也都应用一个View Model或Application
Model的定义,Controller是联系的媒人,架起世界模型和用户分界面之间的大桥,属于表现层。为了View的轻巧性,Controller担当处理依旧将世界模型调换来二个View
Model,这一般称为数据传输对象(DTO)

View 用于拍卖全数表现层方面的标题。View 从 Model
获取数据,并能够把它格式化成用于 web 页的 HTML,用于 web 服务的
XML,或用来 email 的公文。

    Domain
Model
是多个目的层,是对具体世界逻辑、数据和你应用程序所拍卖的难题的空洞。

Martin Fowler 在 PoEAA 中同一时间省略介绍了二种 Domain Model。而 Eric Evans的 Domain Driven Design 一书,则统统专注于 Rich Domain Model
的施行应用和费用进度。

   
Model-View-Controller(模型-视图-调节器,MVC)形式将你的软件组织并分解成八个精光分歧的剧中人物:

<译>拾个asp.net
MVC最好试行
本着Model的极品施行有与此相类似一段:

   
另一方面,领域实体大概要求贰个经过证实的法定的值,所以须求三个在用户分界面包车型客车小圈子模型之间的转移。另几个事例是,用户分界面可能会展现四个滑块,用于用户选拔多少天之后提交他的订单。在这种气象下,视图模型大概选择多少个卡尺头质量来代表,领域模型平日是一个日期值。

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

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

Domain Model
是一个指标层,是对切实世界逻辑、数据和你应用程序所管理的题目标虚幻。Domain
Model 可分为两大类:Simple Domain Model 和 Rich Domain Model。

  • 把世界模型当作视图模型来用,约等于天地模型正是视图模型,一大半皆以这么用的。
  • 视图模型里面含有八个世界模型,定义二个视图模型,里面包罗了二个领域模型,通过品质方式开始展览拜访。
  • 将世界模型映射到视图模型,领域模型并从未一向照射到视图模型,要求管理这种映射关系。
  • Model 封装了你的利用数据、应用流程和专门的工作逻辑。

  • View 从 Model 获取数据并格式化数据以进行展现。

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

   
在ASP.NET MVC的应用程序中平常能够能够见到View
Model,平时大家都感觉世界模型和视图模型是同三个东西。这非常是把世界模型包罗在数量传输对象DTO里的时候,比如利用Entity
Framework之类的ORM工具生成的实业。在这种情景下,领域模型和视图模型满含的实业极度相像,都是局地简易的CRUD操作。

成百上千的MVC方式的落到实处也都接纳贰个View Model或Application
Model的定义,Controller是联系的媒介,架起世界模型和用户分界面之间的桥梁,属于表现层。为了View的简单性,Controller负担处理依旧将世界模型调换来三个View
Model,这一般称为数据传输对象(DTO)。

    Model
包涵了您的应用逻辑和数量,在你的应用程序中,它很只怕是关键的值驱动器。Model
未有另外与表现层相关的表征,并且也和 HTTP
供给管理职责中全然无关。

Rich Domain Model
包括复杂的,使用持续机制紧密联系在联合签名的靶子网络,在本书和 GoF
一书中牵线的居多情势起着杠杆功效。Rich Domain Models
往往是柔性的,精心测量试验过的,不断重构的,并且与它们所发布的领域所需的事体逻辑严峻耦合。

 

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

   
与其余设计情势不一样,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
    封装了您的选取数据、应用流程和业务逻辑。
  • View
    从 Model 获取数据并格式化数据以开始展览显示。
  • Controller
    调节造进程序流程,接收输入,并把它们传递给 Model 和 View。

Model
蕴涵了你的应用逻辑和多少,在你的应用程序中,它很只怕是关键的值驱动器。Model
未有其余与表现层相关的特色,而且也和 HTTP 诉求管理职分中全然非亲非故。

  • Simple Domain Model
    往往是业务对象和数据库表之间一对一的通讯。你早就见过的二种形式 ——
    Active Record、Table Data Gateway,以及 Data
    Mapper,全数那些与数据库相关的设计形式 ——
    能够支持你把与数据库相关的逻辑协会成三个 Domain
    Model。
  • Rich Domain
    Model 蕴含复杂的,使用持续机制紧凑联系在联合签字的指标互联网,在本书和 GoF
    一书中介绍的浩大方式起着杠杆效率。Rich Domain Models
    往往是柔性的,精心测验过的,不断重构的,並且与它们所发挥的天地所需的事体逻辑严密耦合。

Simple Domain Model
往往是业务对象和数据库表之间一对一的通讯。你早已见过的二种方式 —— Active
Record、Table Data Gateway,以及 Data
Mapper,全数这一个与数据库相关的设计情势 ——
能够补助你把与数据库相关的逻辑组织成二个 Domain Model。

 (个人精通:针对域模型与视图模型,一时候供给看具体的事务场景,一般景色下可以遵守上述将DomainModel和ViewModel举行数量映射,以免止有些安全性难点;但是也得以将DomainModel当成ViewModel来利用也是足以的,通过在系统完毕、业务逻辑操作和判断上是足以保险专门的学问安全性的。正是前面一个也要开始展览剖断以管教安全性。所以,依旧看具体业务系统的施用景况与需求来决定利用哪一种办法来落实。

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

   
其余要是二个View必要同有时候管理几个世界模型,View
Model正是那多少个Domain
Model的总量。领域模型和视图模型之间有众多形似的地方,大家日常干脆就把Domain
Model当作View Model来行使了。
   
上边商量了世界模型和视图模型的相似性,大家来看看都有三种方式把世界模型转变为视图模型,日常有3种办法:

    MartinFowler 在 PoEAA 中並且省略介绍了两种 Domain Model。而 Eric Evans 的
Domain Driven Design 一书,则完全专注于 Rich Domain Model
的施行应用和开荒进度。

   
大家不建议直接把世界模型实体暴光给视图,因为有为数十分多微薄之处,大概引致您混合业务和表示层的逻辑,无论是领域实体的习性突显依旧职业的印证法规,那都以应用程序管理的不及如面。

    DomainModel != ViewModel

   
DomainModel代表着相应的域,但ViewModel却是为View的内需而成立。这两个之间也许(一般情形下都)是分化的,别的DomainModel是数码增进行为的组合体,是由复杂的变量类型组成的同期有所等级次序。而ViewModel只是由一些String等轻松变量类型组成。假如想移除冗余何况轻易导致出错的ORM代码,可以应用AutoMapper.假设想要了然更加多。

   
那便是说领域模型(Domain Model
)和视图模型(View Model)有怎么样区别啊?

   
间接将您的领域模型作为Conroller上的拍卖参数面前蒙受着平安危害,因为Controller可能Model
binder必须确认保证属性验证和用户无法修改她要好无法改改的习性(比如,用户手动更新了多少个东躲安徽的输入值,或充实贰个附加的属性值,而这些并非分界面上的要素,但却恰巧领域模型实体的习性,这种风险叫做“over-posting”),就算对当下版本的圈子模型做了不易的注解,领域模型未来可能做了转移修改,并从未出现编写翻译错误只怕警示,大概导致新的风险。
   
咱俩应该防止选拔前两种方式将世界模型调换来视图模型,推荐使用第三种办法,定义单独的视图模型类。做这种领域模型到视图模型的调换职业是一种重复性的专门的工作,已经有多少个工具得以扶助您来形成那项专门的学问。最常用的三个工具正是.NET
社区的开源项目AutoMapper。

   
视图模型平日只含有领域模型的一个子集,何况只包括分界面上所供给的特性。别的,视图模型恐怕是一个世界模型树的扁平版本,举个例子,一个Customer实体有二个Address,而那又是一个完好无损,它包蕴街道地址,邮编,国家等。二个Customer
视图模型用于展示数据,将地方数据拉平填充到视图模型类里。

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

   
选用哪一类 Domain
Model 类型取决于你的应用情形。倘使你正在创建的是四个非常简单的表单管理web 应用,没要求建设构造 Rich Domain
Model。然则,尽管你正在编纂几位股票总市值数百万的商店内联网架构的主导库,那么拼命付出三个Rich Domain Model
便是值得的,它可以为您提供多个确切表达业务进度的阳台,并得以让您火速传输数据。