亚洲必赢手机领域模型(DomainModel)与视图模型(ViewModel)领域模型(DomainModel)与视图模型(ViewModel)

by admin on 2018年10月5日

   
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
包含了卿的应用逻辑和数目,在公的应用程序中,它不行可能是重要的值驱动器。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。
  • Rich Domain
    Model 包含复杂的,使用持续机制紧密联系在一块的目标网络,在本书及 GoF
    一开被介绍的无数模式于在杠杆作用。Rich Domain Models
    往往是柔性的,精心测试了的,不断重构的,而且同它所发表的世界所待的事情逻辑严谨耦合。
  • Simple Domain Model
    往往是工作对象以及数据库表之间一对一之通信。你既呈现了之几栽模式 ——
    Active Record、Table Data Gateway,以及 Data
    Mapper,所有这些与数据库相关的设计模式 ——
    可以拉您把与数据库相关的逻辑组织成为一个 Domain
    Model。
  • 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
就是值得的,它好吧公提供一个准表达业务过程的阳台,并可以于您速传输数据。

    Martin
Fowler 在 PoEAA 中并且概括介绍了点滴种 Domain Model。而 Eric Evans 的
Domain Driven Design 一写,则一心专注让 Rich Domain Model
的实行应用以及开支进程。

    Martin
Fowler 在 PoEAA 中而且概括介绍了点儿种 Domain Model。而 Eric 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

    DomainModel != ViewModel

   
DomainModel代表着相应的域,但ViewModel却是吧View的用而创造。这两者之间或许(一般景象下还)是见仁见智的,此外DomainModel是数增长行为之组合体,是由复杂的变量类型组成的同时有所层次。而ViewModel只是由于局部String等简易变量类型组成。如果想移除冗余并且爱造成差的ORM代码,可以使用AutoMapper.如果想如果询问又多。

   
DomainModel代表正相应的域,但ViewModel却是吗View的需要而创办。这两者之间或许(一般情形下还)是差的,此外DomainModel是数额增长行为之组合体,是由于复杂的变量类型组成的同时存有层次。而ViewModel只是由于有String等简易变量类型组成。如果想移除冗余并且爱导致差的ORM代码,可以行使AutoMapper.如果想使打听再多。

   
那领域模型(Domain Model
)和视图模型(View Model)有啊两样呢?

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

   
在ASP.NET MVC的应用程序中经常可以好见见View
Model,经常我们还认为世界模型与视图模型是与一个事物。这特别是将世界模型包含在数量传对象DTO里的上,例如使用Entity
Framework之类的ORM工具转的实体。在这种状态下,领域模型和视图模型包含的实业非常相似,都是一些简易的CRUD操作。

   
在ASP.NET MVC的应用程序中常常得可以视View
Model,经常我们都当世界模型和视图模型是跟一个东西。这特别是把世界模型包含在数传对象DTO里的时光,例如使用Entity
Framework之类的ORM工具转的实业。在这种状态下,领域模型和视图模型包含的实体非常相像,都是片粗略的CRUD操作。

   
这些实体有很多性,有同或者类似之名号,你可充分轻地映射领域实体对应视图模型中的一个属性。不过,这些相似之特性为恐怕略有不同,例如类型或者格式。例如,用户填写的用户界面的一个性质,他于视图模型里或者是一个“Nullable”的。

   
这些实体有众多性质,有同一或者类似的称呼,你可好轻地映射领域实体对应视图模型中的一个性能。不过,这些相似之习性也恐怕略有不同,例如类型或者格式。例如,用户填写的用户界面的一个属性,他在视图模型里或者是一个“Nullable”的。

   
另一方面,领域实体可能要一个透过验证的官的值,所以待一个每当用户界面的领域模型中的更换。另一个例是,用户界面可能会见来得一个滑块,用于用户选择多少天以后提交他的订单。在这种情况下,视图模型或用一个平头性质来表示,领域模型通常是一个日期值。

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

   
视图模型通常只有包含领域模型的一个子集,而且仅含界面及所要之特性。此外,视图模型或是一个领域模型树的扁平版本,例如,一个Customer实体有一个Address,而就又是一个完整,它涵盖街道地址,邮政编码,国家等。一个Customer
视图模型用于展示数据,将地址数据拉平填充到视图模型类里。

   
视图模型通常就包含领域模型的一个子集,而且光含有界面上所欲的特性。此外,视图模型或是一个天地模型树的扁平本,例如,一个Customer实体有一个Address,而这还要是一个完整,它包含街道地址,邮政编码,国家等。一个Customer
视图模型用于展示数据,将地方数据拉平填充到视图模型类里。

   
此外要一个View需要同时处理几乎只世界模型,View
Model就是就几乎独Domain
Model的总和。领域模型与视图模型中来许多貌似的地方,我们常常干脆就将Domain
Model当作View Model来利用了。
   
上面讨论了世界模型和视图模型的相似性,我们来瞧都起几乎种艺术将世界模型转换为视图模型,通常发生3种植方法:

   
此外要一个View需要同时处理几乎单领域模型,View
Model就是马上几只Domain
Model的总和。领域模型和视图模型中发生好多貌似之地方,我们常常干脆就是把Domain
Model当作View Model来使用了。
   
上面讨论了世界模型与视图模型的相似性,我们来看望都发出几乎栽艺术拿世界模型转换为视图模型,通常发生3种方法:

  • 管世界模型作视图模型来用,也就是是小圈子模型就是视图模型,大部分且是这么用的。
  • 视图模型中富含一个世界模型,定义一个视图模型,里面包含了一个天地模型,通过性方式开展访问。
  • 将世界模型映射到视图模型,领域模型并不曾直接照射到视图模型,需要处理这种映射关系。
  • 拿世界模型作视图模型来用,也就算是天地模型就是视图模型,大部分还是如此用之。
  • 视图模型中包含一个领域模型,定义一个视图模型,里面含有了一个世界模型,通过性方式进行走访。
  • 用世界模型映射到视图模型,领域模型并无一直照射到视图模型,需要处理这种映射关系。

   
我们无建议直接拿世界模型实体暴露被视图,因为来好多微薄之处在,可能引致您混合业务及代表层的逻辑,无论是领域实体的属性显示还是业务的说明规则,这还是应用程序处理的不同点。

   
我们不建议直接把世界模型实体暴露于视图,因为来成百上千微薄的处在,可能造成您混合业务以及代表层的逻辑,无论是领域实体的习性显示还是业务的征规则,这还是应用程序处理的不等方面。

   
直接以公的圈子模型作Conroller上之拍卖参数面临着安全风险,因为Controller或者Model
binder必须管属性验证和用户不能够修改它要好非克改的习性(例如,用户手动更新了一个隐形的输入值,或充实一个分外的属于性值,而者并无是界面及之要素,但也正领域模型实体的性质,这种风险叫做“over-posting”),即使对时本的园地模型做了不利的辨证,领域模型前或许做了变动修改,并无出现编译错误或警示,可能造成新的风险。
   
我们当避免下前少栽艺术将世界模型转换成视图模型,推荐以第三种方法,定义单独的视图模型类。做这种领域模型到视图模型的易工作是一样种植重复性的办事,已经生几乎独器得以帮您来完成这项工作。最常用之一个工具就是是.NET
社区的开源项目AutoMapper。

   
直接拿你的天地模型作Conroller上之处理参数面临着安全风险,因为Controller或者Model
binder必须保证属性验证和用户不克改它好无可知改改的性(例如,用户手动更新了一个藏匿的输入值,或增加一个外加的属于性值,而此并无是界面及之素,但却恰恰领域模型实体的性能,这种风险叫做“over-posting”),即使对脚下版的领域模型做了不错的说明,领域模型前或做了移修改,并没有出现编译错误或警示,可能致新的风险。
   
我们应该避免使前少种办法将世界模型转换成视图模型,推荐用第三栽艺术,定义单独的视图模型类。召开这种领域模型到视图模型的换工作是千篇一律种重复性的做事,已经出几乎单器得以帮助而来形成这项工作。最常用之一个器就是是.NET
社区的开源项目AutoMapper。

 (个体掌握:针对域模型和视图模型,有时候要看具体的工作场景,一般情况下可以依照上述将DomainModel和ViewModel进行多少映射,以避免有些安全性问题;但是呢足以以DomainModel当成ViewModel来以啊是足以的,通过当系实现、业务逻辑操作以及判及是好管工作安全性的。就是前者也要是开展判定坐保证安全性。所以,还是看现实业务体系的采用条件暨要求来决定下哪种办法来促成。

 (个体知道:针对域模型和视图模型,有时候用看具体的事情场景,一般情况下可以依照上述将DomainModel和ViewModel进行多少映射,以避免有些安全性问题;但是呢得将DomainModel当成ViewModel来采取与否是可以的,通过当系贯彻、业务逻辑操作与判及是得保工作安全性的。就是前者也使开展判定为管安全性。所以,还是看具体工作体系的运条件与要求来决定以哪种方式来贯彻。

 

 

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

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

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图