Model在MVC中的作用是什么?

2024-05-13

我读过一些有关 MVC 的文章,但有一点我不清楚。该模型在实际中的作用是什么?

模型是否代表业务对象? 或者它只是一个帮助将信息从控制器发送到视图的类?

以两个业务类为例(从数据库填充数据)

Class Image
    Property FileName As String
    Property CreatedBy As User
End Class

Class User
    Property UserName as String
End Class

“图像”将成为模型还是我应该创建一个新类?

在模型中,我应该创建一个 UserName 属性来从 User 对象中获取数据吗?

Class ImageModel
    Property FileName As String
    Property CreatedBy As User

    ReadOnly Property UserName As String
        Get
            Return User.UserName
        End Get
    End Property
End Class

对此有很多观点,但根据我的经验,主要有两种观点:Model:

视图模型

这是一个 POCO,仅包含显示所需的所有数据View。数据通常由以下内容填充Controller.

胖模型,瘦控制器

The Model完成大部分业务工作。它包含并填充了所需的所有数据View,并由Controller保存数据等

MVC 之美

MVC 的美妙之处在于它是开放的!您可以选择您想要的任何类型的模型...您可以将所有数据放入ViewState,变成一个Model,变成一个ViewModel其中包含一堆Models,无论如何。这真的取决于你。模型、视图和控制器是空白画布,可以随心所欲地使用。

我用什么

我的团队做了很多 MVC 工作,并且我们尝试了许多不同的方法。我们最终决定我们最喜欢的是胖模型,瘦控制器范例。
我相信这种模式最擅长“保持简单”和“不要重复自己”,并且绝对保持了“关注点分离”。
我们的代码的组织方式如下:

  • Controllers
    • 处理与 HTTP 请求相关的所有内容 - 重定向、身份验证、Web 安全、编码等。
    • 将所有“输入”提供给Model,并给出Model到视图。不访问业务或数据层。
  • Views
    • 处理所有 HTML 和 JSON 生成
    • 仅访问强类型的数据Model
  • Models
    • 负责进行所有更新、调用业务层和数据层、加载所有数据
    • 处理所有验证和错误,并将它们返回给控制器
    • 包含所需的所有数据的属性View,并自行填充

尽管这听起来像是 MVC 的通用原则,但很快就会发现 MVC 不需要这些原则,这就是许多项目使用其他原则的原因。

Example

这是一个例子Model。控制器创建它,它填充自己,然后控制器将它传递给视图。

public class UsersModel
{
    protected UserBusiness userBusiness = new UserBusiness();
    
    public UsersModel(string editUserName)
    {
        // Load all users:
        this.Users = userBusiness.GetAllUsers();
        
        // Load the user to be edited:
        this.EditUser = (editUserName == null) ? null : userBusiness.GetUser(editUserName);
    }
    
    public List<User> Users { get; private set;}
    public User EditUser { get; private set; }
}

在这种情况下,所有“用户业务逻辑”都位于不同的项目(我们的“业务层”)中,因为我们有一个大型系统。但较小的项目不需要这个......模型可以包含业务逻辑,甚至数据访问代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Model在MVC中的作用是什么? 的相关文章

  • Node + now.js + 模型-视图-控制-模式

    我正在使用基于 MVC 模式 模板和 PHP 类 的论坛软件 页面如下所示 domain com index php page Test 我想使用 Node 和 now js 在一个页面 domain com index php page
  • 具有 Windows 身份验证的 ASP.NET Web API 自托管

    我正在尝试将 ASP NET Web API 自托管选项与 Windows 身份验证结合使用 以便我可以确定登录的用户 并最终根据用户的身份接受或拒绝用户 这是我的控制台应用程序代码 using System using System We
  • 将 Web API 添加到 asp.net MVC 项目时出现问题(追溯)

    我正在 Visual Studio 2013 中使用 asp net mvc 迈出第一步 但遇到了一个奇怪的问题 我以 MVC 的形式启动了我的项目 并且没有选中 Web API 框来包含核心参考 不过现在我想使用 Web API 功能 我
  • asp.net mvc GET 请求上的 formcollection 应该为空

    我正在发布一个简单的操作 public void Login FormCollection formCollection 即使查询字符串值很少 formcollection Count is 0 是靠行为吗 FormCollection 使
  • 使用 SimpleMembership 获取用户信息

    仍在尝试使用 MVC4 来掌握新的 SimpleMembership 我更改了模型以包含名字和姓氏 效果很好 我想更改登录时显示的信息 而不是在视图中使用 User Identity Name 我想做类似 User Identity For
  • asp.net mvc 我什么时候应该读取 servervariables?

    我什么时候可以从服务器变量收集信息 代码的一部分 我的意思是 我尝试过这样称呼 string temp Request ServerVariables Get HTTP REMOTE USER 在控制器构造函数中 但我收到一个空指针异常 而
  • mvc中基于远程验证的错误

    这是我的控制器代码 AcceptVerbs HttpVerbs Post public JsonResult CheckBuildingName var isUnique true string buildingName Request F
  • MVC3远程模型验证操作中的参数名称

    我使用远程验证属性SSN属性 在视图页面中我使用通用视图 然后 ssn 字段如下 Html EditorFor model gt model MainModel SSN Html ValidationMessageFor model gt
  • MVC 5 Razor 活动导航选项卡

    我一直在尝试突出显示我的项目中的活动导航选项卡 我的任务是更新旧网站而不更改为引导程序 这是我的经验所在 我找到了一个包含我需要的大部分内容的示例 目前 唯一具有 选定类别 的选项卡是 主页 选项卡 当我单击另一个选项卡时 主页 选项卡不再
  • 在 MVC 3 中,我无法让 @Html.DisplayFor 呈现格式化字符串

    我希望这是一个非常简单的问题 尽管经过大量谷歌搜索后 我还没有能够解决这个问题 我正在使用 MVC 3 开发一个购物车网站 并使用代码优先的实体框架 我发送的模型是 Product 对象的列表 每个对象都包含此属性 Required Err
  • IE8 中的 Javascript 消息超出堆栈空间

    我正在使用 Breeze 1 4 1 Internet Explorer 8 和 ASP NET MVC 4 Web API 我在查询时收到以下消息 查询失败 localhost port breeze Data Metadata 元数据导
  • 渲染以 Markdown 形式上传并在服务器端转换为 Html 的 Html 是否安全?

    我有一个网络表单 允许用户以 Markdown 形式上传文本 Markdown 在服务器上转换为 Html 使用 Markdig 并存储 当显示用户上传的转换后的 Html 时 我应该 Html Encode 内容 该项目采用 c MVC
  • 子文件夹中忽略 ASP.NET web.config 授权设置

    我正在使用 asp net mvc 2 和 vs 2008 我正在尝试制作具有表单授权的网站 当我尝试限制对某些页面的访问时 我正在使用 asp net 管理工具 例如 我创建规则来拒绝匿名用户访问整个网站 正如预期的那样 管理工具在根 w
  • 将有用的消息从一个控制器传递到另一个重定向的控制器

    我想在用户单击按钮后创建 RedirectToAction 在重定向之前 我将信息存储到变量中 最后 在我转向行动之后 我想展示一些有用的信息 我试过这个 ViewBag message User with ID id was change
  • 如何在网站上重新创建电子表格或共享点数据表视图?

    我正在尝试将用户从共享点解决方案迁移到网站 SQL 后端 一件事是每个人似乎都喜欢共享点视图和数据表视图来编辑和管理信息 什么是最好的电子表格 访问数据编辑解决方案 是否有任何第三方 ASP NET MVC 小部件是很好的替代品 Teler
  • ASP .NET MVC 5 - 客户地址一对一关系

    我在这里查看了论坛 实际上发现了一些类似的问题 但不是相同的问题 类似的解决方案没有给我正确的答案 我正在使用实体框架和代码优先方法来处理 ASP NET MVC 5 我想建立客户 gt 地址一对一关系的模型 我建模的是 客户等级 publ
  • 外部组件中的控制器上的 404

    我在解决 Asp Net MVC 4 项目中的 404 响应时遇到问题 它是在 VS2012 中构建的 目标版本为 4 5 我已将预编译的视图和控制器内置到独立的 DLL 中 我能够动态加载 DLL 并从我的核心项目中检查它们 甚至调用它们
  • 为什么 ASP.NET MVC 上的控制器是基于名称的?

    在 ASP NET MVC 中 我们需要对所有控制器使用后缀 Controller 这似乎是不必要的限制 有技术原因吗 我主要只是好奇 但可以看到更灵活的命名规则可以改善代码组织的情况 使用反射来搜索是否可以轻松发现可能的控制器类Contr
  • 为 ASP.NET MVC 实现自定义登录

    我是 ASP NET MVC 的新手 需要一些关于如何实现以下内容的建议 该站点是一个使用率很高的站点 内部 内联网 约有 200 个用户 我们使用表单身份验证来访问 SQL Server DB 不是 Windows 集成 有些操作受到保护
  • 如何通过 jQuery 加载部分视图?

    我正在尝试使用 jQuery 加载部分视图 正在从 Contact cshtml 加载部分视图 然而 在 Chrome 中 当我尝试加载partialViewName cshtml 时 我不断收到 404 错误 我有以下文件夹结构 View

随机推荐

  • 根据单元格值隐藏列

    在我的谷歌电子表格 A 中 我使用 TRANSPOSE 和 IMPORTRANGE 公式的组合从日历电子表格 B 导入数据 以便填写事件的工作时间表 因为每个日期都有 3 个事件空位 但这些空位并不总是被填满 所以我收到了很多过时的列 表格
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • 如何加速 R for 循环?

    我正在为 R 中 GWmodel 包中的 gwr basic 函数运行以下 for 循环 我需要做的是收集任何给定带宽的估计参数的平均值 代码如下 library GWmodel data DubVoter Dub voter LARent
  • R:为什么 kable 不在 for 循环内打印?

    我正在使用 rmarkdown 和 Latex 编写报告 我需要使用打印一组表格knitr kable 但在 for 循环内时不会打印 这是我的代码 title project title author Mr Author date 201
  • 将 Gitlab CI 阶段配置为不并行运行

    我有一个具有多个阶段的 Gitlab CI 管道 默认情况下 两个作业之间的同一阶段将并行运行 我所经历的阶段之一是集成测试阶段 该阶段一次只能有一个正在运行的实例 因为它依赖于正在设置和拆除的特定资源 有没有一种简单的方法来指定某个阶段应
  • 直接在应用程序中评价 Google Play 应用程序 [重复]

    这个问题在这里已经有答案了 我需要在我的 Android 应用程序中设置费率选项 我找到了这个link http www androidsnippets com prompt engaged users to rate your app i
  • 表单提交后 Django 重定向不起作用

    Django 新手 所以这个可能有一个非常简单的答案 但我一生都找不到具体的解决方案 我只是想在使用 FileField 提交表单后重定向到新的 URL 我可以单独导航到该 URL 效果很好 文件上传正确 因此我知道它已正确验证 但重定向返
  • Swift UINavigationController 子类中的强制 init 覆盖

    我目前正在子类化UINavigationController对于服务视图控制器流的框架 在某种程度上 就像UIImagePickerController do 这是我的实现示例 尽可能简单 可以在操场上运行 import UIKit pub
  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • 为什么cherry-pick总是会导致合并冲突?

    我正在从发布分支中挑选特定的提交到我的本地工作副本中 每次我从发布分支中挑选一个提交时 我都会遇到必须解决的合并冲突 即使更改看起来微不足道 例如 const char kApplicationVersion Develop const c
  • 在流星收集加载时显示加载程序

    我有一个模板 task list 看起来像这样 each tasks gt task each Template task list tasks返回一个集合 在用户界面中 加载似乎需要一些时间 当集合正在加载时 我想显示一个加载指示器 关于
  • 使用 DbMigrationsConfiguration 将ExecutionStrategy 设置为 SqlAzureExecutionStrategy?

    我今天看到一篇关于实现 SqlAzureExecutionStrategy 的帖子 http romiller com tag sqlazureexecutionstrategy http romiller com tag sqlazure
  • S4 类 [(子集)带有附加参数的继承

    这是一个扩展在 R 中的访问器函数中使用 callNextMethod https stackoverflow com q 24875284 2752888 2017 03 25 更新 为了说明如何仅在加载方法时失败 但在构建的包中时不会失
  • 将指令外部的值传递给父指令时,“错误:输出未定义”

    我有一个 root app 组件 它在模板中是这样定义的 template
  • SwingUtilities.invokeLater

    我的问题与SwingUtilities invokeLater 我应该什么时候使用它 每次需要更新 GUI 组件时都必须使用吗 它到底有什么作用 是否有替代方案 因为它听起来不直观并且添加了看似不必要的代码 Do I have to use
  • 多个源文件中包含包含“const”的头文件

    Why does not包含定义的头文件const并被多个源文件包含会产生编译错误multiple definition const in header file h const int num 5 int x Error Multiple
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • 停止在 iOS Web 应用程序上滚动屏幕边缘?

    正在开发 iOS 网络应用程序 用户可以上下滚动页面内容 但是 有没有办法阻止屏幕被拖动得太远以致灰色背景变得可见 这可以通过在移动 Safari 中打开任何网页并将页面下拉来复制 您可以使用诸如 Pastrykit 或 iScroll 之
  • 如何编辑 QProgressBar 的样式表

    我无法在我的应用程序中编辑进度条的颜色 仅编辑文本颜色 pyhton 3 9 PySide6 QT Creator 7 0 2 Python应用程序 https i stack imgur com 6hKFI png import sys
  • Model在MVC中的作用是什么?

    我读过一些有关 MVC 的文章 但有一点我不清楚 该模型在实际中的作用是什么 模型是否代表业务对象 或者它只是一个帮助将信息从控制器发送到视图的类 以两个业务类为例 从数据库填充数据 Class Image Property FileNam