加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 模型在MVC中的作用是什么?

发布时间:2020-12-16 03:37:36 所属栏目:asp.Net 来源:网络整理
导读:我读过一些关于MVC的文章,但有一件事我不清楚.该模型在实际中的作用是什么. 模型是否代表业务对象? 或者它只是一个帮助从控制器向视图发送信息的类? 以两个业务类为例(从数据库填充的数据) Class Image Property FileName As String Property CreatedBy As
我读过一些关于MVC的文章,但有一件事我不清楚.该模型在实际中的作用是什么.

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

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

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

Class User
    Property UserName as String
End Class

将“Image”作为模型还是应该创建一个新类?

在模型中,我应该创建一个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

解决方法

对此有很多看法,但根据我的经验,该模型有两个主要观点:

视图模型

这是一个POCO,它只包含显示View所需的所有数据.数据通常由Controller填充.

胖模型,瘦瘦的控制器

该模型完成了大部分业务工作.它包含并填充View所需的所有数据,并由Controller用于保存数据等.

MVC之美

MVC的美妙之处在于它是开放的!您可以选择任何类型的模型…您可以将所有数据放入ViewState,放入模型,放入包含一堆模型的ViewModel,无论如何.这完全取决于你.模型,视图和控制器是空白的画布,可以随意使用.

我用的是什么

我的团队已经做了很多MVC工作,我们已经尝试了很多这些不同的方法.我们最终决定我们最喜欢的是Fat Model,Skinny Controller范例.
我相信这种模式是“保持简单”和“不重复自己”的最佳模式,它绝对保持了“关注点分离”.
以下是我们的代码组织方式:

>控制器

>处理与HTTP请求有关的所有内容 – 重定向,身份验证,Web安全,编码等.
>为模型提供所有“输入”,并将模型提供给视图.不访问业务层或数据层.

>意见

>处理所有HTML和JSON生成
>仅访问强类型模型中的数据

>模特

>负责进行所有更新,调用业务和数据层,加载所有数据
>处理所有验证和错误,并将这些返回给Controller
>包含View所需的所有数据的属性,并填充自身

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

这是一个示例模型. Controller创建它,它自己填充,Controller将它传递给View.

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; }
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读