视图模型

每个视图定义一个对象模型可以帮助你跟踪视图的真实所需。所以应该为每一个应用程序中的视图定义视图模型类。

每个视图都应该有一个视图模型类。可以使用控制器名称和视图名称的一个组合。例如,从Home控制器调用的命名Index的视图,其视图模型对象可能被命名为HomelndexViewModel。

更好的做法是,可以在Models文件夹中创建一个名为Home的子文件夹,并在其中建立一个IndexViewModel类。

那么如何开发一个视图模型类呢?

首先,视图模型对象是一个只有数据而(几乎)没有行为的普通数据传输对象,视图模型对象上的属性会完全以视图所期望的格式公开数据,它只提供视图所需的数据。围绕视图而非数据来设计视图模型类的结构往往是原则。换句话说,应该倾向于把视图模型类设计为一个容器。视图模型类,最终是为视图建模,而不是为数据。

其次使用一个视图模型对象时,必须在视图模板中声明该视图模型类型。如在视图模板中声明:@model xxxxViewModel。

最后,但具有更好可重用性和预期更长使用寿命的大型项目中,可能要以所使用的所有视图模型类来创建一个独立的类库。在小项目中,可能需要把所有的类隔离到一个特定的文件夹中。可以在Models文件夹创建一个ViewModels文件夹,并将其按控制器设置专属的子文件夹。

例如:

Models》ViewModels》控制器名称》IndexViewModel.cs

Models》ViewModels》控制器名称ABCD》ABCDsyViewModel.cs

时间: 2024-12-28 21:42:10

视图模型的相关文章

知识点5-1:视图模型

对于一个在线商店,域模型可能由表现产品.订单.客户等的类所组成,它对定义这些实体的数据和业务规则都进行了封闭,这种模型用作建立用户界面以及定义业务规则的基础.尽管这种办法可能适合某些应用程序(通常是有简单域的小型应用程序),但经常会带来麻烦,特别是当应用程序增长,且要求UI偏离业务逻辑需求时,一个利害冲突可能会导致过于复杂和不可维护的软件. 这个问题的解决方法是引入视图模型(View Model),以简化渲染用户界面所需的逻辑.我们将考擦如何定义视图模型,以及用来将用户界面的数据回发给控制器层的

利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明

上一篇我们已经介绍了如何使用NuGet把MVVMLight应用到我们的WPF项目中.这篇我们来了解下一个基本的MVVMLight框架所必须的结构和运行模式. MVVMLight安装之后,我们可以看到简易的框架布局,如上篇,生成了一个ViewModel文件夹,ViewModel层的内容都放在这边,除了Main对象的ViewModel之外,还包含一个ViewModelLocator文件, 用来注入当前的ViewModel全局实例. 一.先来说说分层结构: 如图: 1.View负责前端展示,与View

视图模型和分页

一. 视图模型关联模型可以解决一对一.一对多和多对多等关联操作.它们通过生成多条 SQL 语句然后进行数组拼装得到最终想要的结果.对于一对一这种 HAS_ONE 和 BELONGS_TO 的多表关联查询,可以使用视图模型.它采用的是联合查询(JOIN),非常适合此类查询需求. 在 WeiBo/Home/Controller/UserController.class.php 中的代码为: 1 class UserController extends Controller { 2 public fu

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第三章:搜索、高级过滤和视图模型

在这一章中,我们首先添加一个搜索产品的模块以增强站点的功能,然后使用视图模型而不是ViewBag向视图传递复杂数据. 注意:如果你想按照本章的代码编写示例,你必须完成第二章或者直接从www.apress.com下载第二章的源代码. 3.1 添加产品搜索 为了执行产品搜索,我们将添加一些功能使其能够按照产品名称.描述和分类进行搜索,从而让用户有一个更好的选择来查找相关结果. 之所以将分类也包含在内,是因为如果用户输入的是"clothes",而不是一件特定的衣服,那么所有的衣服都会被搜索到

架构蓝图--软件架构 "4+1" 视图模型

引言 我们已经看到在许多文章和书籍中,作者欲使用单张视图来捕捉所有的系统架构要点.通过仔细地观察这 些图例中的方框和箭头,不难发现作者努力地在单一视图中表达超过其表达限度的蓝图.方框是代表运行的程序吗?或者是代表源代码的程序块吗?或是物理计算机 吗?或仅仅是逻辑功能的分组吗?箭头是表示编译时的依赖关系吗?或者是控制流吗?或是数据流吗?通常它代表了许多事物.是否架构只需要单个的架构样式?有 时软件架构的缺陷源于过早地划分软件或过分的强调软件开发的单个方面:数据工程.运行效率.开发策略和团队组织等.

ThinkPHP中视图模型详解.

很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相对于使用原生SQL语句来说,着实是简单不少. 首先在数据表初始化的时候,用的不是传统的M('User'),在视图模型中使用的是D('UserView'),如下图: 需要主要的是几个单词的首字母大写. 之后在Lib/Model目录中新建名为XXXViewModel.class.php(XXX为任意控制

CodeIgniter视图 & 模型 & 控制器

-------------------------------------------------------------------------------------------------------- 载入视图 $this->load->view('home/name'); //可以用子文件夹存储视图,默认视图文件以'.php'结尾 载入多个视图 $data['title'] = 'chenwei'; //给视图添加动态数据 $data['message'] = 'Your messa

thinkphp 视图模型使用分析

<?php /** * 视图模型 * */ class ViewBatchModel extends ViewModel{ public $viewFields = array( 'Jinxiao_batch'=>array('id','orderid','proid','subid','time','productdate','intobatch','num'), 'Jinxiao_product'=>array('id'=>'productID','default2'=>

【ThinkPHP】关于ThinkPHP关联模型和视图模型的一些心得

视图模型更加类似一张表虚拟的表,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成.对其中所引用的基础表来说,视图的作用类似于筛选,这是ThinkPHP手册上的说法 其实说白了,视图模型就是mysql多表查询而已,视图模型不支持多表更新,删除 而关联模型是多个表查询以后的结果组合,会多次查询mysql,(在执行完主表查询以后,会有个_after_select)之类的操作,然后组合结果集.在一些情