365体育网投概念上之 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
包含了您的应用逻辑和数码,在公的应用程序中,它那个可能是第一的值驱动器。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种办法:

  • 拿世界模型作视图模型来用,也尽管是天地模型就是视图模型,大部分且是如此用的。
  • 视图模型中包含一个世界模型,定义一个视图模型,里面含了一个领域模型,通过性能方式开展访问。
  • 以世界模型映射到视图模型,领域模型并不曾一直照射到视图模型,需要处理这种映射关系。
  • 把世界模型作视图模型来用,也就是是圈子模型就是视图模型,大部分还是这般用之。
  • 视图模型中含一个领域模型,定义一个视图模型,里面含有了一个天地模型,通过性方式展开走访。
  • 用世界模型映射到视图模型,领域模型并没有直接照射到视图模型365体育网投,需要处理这种映射关系。

   
我们不建议直接将世界模型实体暴露于视图,因为有好多分寸的处,可能引致您混合业务及象征层的逻辑,无论是领域实体的性显示还是政工的证明规则,这还是应用程序处理的不同地方。

   
我们不建议直接将世界模型实体暴露于视图,因为有成百上千轻的处,可能造成您混合业务以及代表层的逻辑,无论是领域实体的属性显示还是工作的证实规则,这还是应用程序处理的不等点。

   
直接用公的小圈子模型作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

相关文章