欢迎来到天天文库
浏览记录
ID:59256887
大小:16.57 KB
页数:2页
时间:2020-09-08
《ASPNETMVC中使用ViewModel分离领域模型.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ASP.NETMVC中使用ViewModel分离领域模型MVC架构模式是近年来编程世界里最长被提及的模式之一,ModelViewController(模型-视图-控制器,MVC)模式将你的软件组织并分解成三个截然不同的角色: ◆Model封装了你的应用数据、应用流程和业务逻辑。 ◆View从Model获取数据并格式化数据以进行显示。 ◆Controller控制程序流程,接收输入,并把它们传递给Model和View。 与其它设计模式不同,MVC模式并没有直接反映一个你能够编写或配置的类结构。相反,MVC更像一个概念上的指导原则或范型。概念上的MVC模式被描述为三
2、个对象——Model、View和Controller——之间的关系。由于View和Controller都可以从Model请求数据,所以Controller和View都依赖Model。任何输入都通过Controller进入你的系统,然后Controller选择一个View来发出结果。 Model包含了你的应用逻辑和数据,在你的应用程序中,它很可能是主要的值驱动器。Model没有任何与表现层相关的特性,而且也和HTTP请求处理职责中完全无关。DomainModel是一个对象层,是对现实世界逻辑、数据和你应用程序所处理的问题的抽象。DomainModel可分为两大类:Si
3、mpleDomainModel和RichDomainModel。 SimpleDomainModel往往是业务对象和数据库表之间一对一的通信。你已经见过的几种模式——ActiveRecord、TableDataGateway,以及DataMapper,所有这些与数据库相关的设计模式——可以帮助你把与数据库相关的逻辑组织成一个DomainModel。 RichDomainModel包含复杂的,使用继承机制紧密联系在一起的对象网络,在本书和GoF一书中介绍的众多模式起着杠杆作用。RichDomainModels往往是柔性的,精心测试过的,不断重构的,而且与它们所表达的
4、领域所需的业务逻辑紧密耦合。 采用哪种DomainModel类型取决于你的应用环境。如果你正在建立的是一个非常简单的表单处理web应用,没必要建立RichDomainModel。然而,如果你正在编写一个价值数百万的企业内联网架构的核心库,那么努力开发一个RichDomainModel就是值得的,它可以为你提供一个准确表达业务过程的平台,并可以让你快速传输数据。 MartinFowler在PoEAA中同时简要介绍了两种DomainModel。而EricEvans的DomainDrivenDesign一书,则完全专注于RichDomainModel的实践应用和开发过程
5、。View用于处理所有表现层方面的问题。View从Model获取数据,并可以把它格式化成用于web页的HTML,用于web服务的XML,或用于email的文本。 许多的MVC模式的实现也都使用一个ViewModel或ApplicationModel的概念,Controller是沟通的媒介,架起领域模型和用户界面之间的桥梁,属于表现层。为了View的简单性,Controller负责处理或者将领域模型转换成一个ViewModel,这通常叫做数据传输对象(DTO)。12个ASP.NETMVC最佳实践针对Model的最佳实践有这么一段: 7–DomainModel!=Vi
6、ewModel DomainModel代表着相应的域,但ViewModel却是为View的需要而创建。这两者之间或许(一般情况下都)是不同的,此外DomainModel是数据加上行为的组合体,是由复杂的变量类型组成的并且具有层次。而ViewModel只是由一些String等简单变量类型组成。如果想移除冗余并且容易导致出错的ORM代码,可以使用AutoMapper.如果想要了解更多,我推荐阅读:ASP.NETMVCViewModelPatterns,那么领域模型(DomainModel)和视图模型(ViewModel)有什么不同呢? 在ASP.NETMVC的应用程序
7、中经常可以可以看到ViewModel,经常我们都认为领域模型和视图模型是同一个东西。这特别是把领域模型包含在数据传输对象DTO里的时候,例如使用EntityFramework之类的ORM工具生成的实体。在这种情况下,领域模型和视图模型包含的实体非常相似,都是一些简单的CRUD操作。 这些实体有许多属性,有相同或类似的名称,你可以很容易地映射领域实体对应视图模型中的一个属性。不过,这些相似的属性也可能略有不同,例如类型或者格式。例如,用户填写的用户界面的一个属性,他在视图模型里可能是一个“Nullable”的。 另一方面,领域实体可能需要一个经过验
此文档下载收益归作者所有