模型类和数据类之间的区别是什么



我是web开发的新手,我很难区分模型类和数据类,尤其是在实现它们时。

我发现了这个问题,我有点理解了它的理论:数据类包含了关于对象的所有核心信息,而模型类只包含了需要公开的信息。所以我可以有一个这样的用户数据类:

public class User {
public long Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public int Score { get; set; }
}

登录页面的模型类如下:

public class UserModel {
[Required]
public string Password { get; set; }
[Required]
[EmailAdress]
public string Email { get; set; }
}

我必须为注册创建另一个模型类,例如,添加Name属性。但是,我是否需要为每个新模型重复相同的属性?模型是否需要从User数据类继承?所有这些都是MVC模式特有的吗?模型类和数据类在实际实现中是如何相互关联的?

如果有帮助的话,我会使用Blazor WebAssembly。

我注意到,在ASP.NET Core、ASP.NET MVC(较旧,已被ASP.NET Core取代(、Razor和Blazor的上下文中;型号";是";视图模型";。不要将其与";实体模型类";,我相信你指的是";数据类";。

但是我需要为每个新模型重复相同的属性吗?

是(例外,例如当您组成视图模型时(

模型需要从User数据类继承吗?

不,不要那样做。

虽然两个或多个不同类型(类(可以共享相同的成员,但这并不意味着它们表示相同的"类";事物。在OOP中,继承应该只用于表示";是";关系,而不是";具有";关系,尤其不是"关系">I’m to lazy to have to declare-all of my-members-again-argh"(尽管我对最后一件事感到非常内疚…(。

不幸的是,C#(还(不支持mixins,这是一个术语,用于描述面向对象语言具有多个具有相同成员的不同类型的能力,而不表达这些类型之间的任何实际关系。

(除了.NET Core 3.0上的C#8.0支持具有默认接口实现的_quai-_mixins,但与真正的mixin相比,它有一些局限性,例如,我知道你不能使用这种方法导入运算符重载、转换运算符或构造函数,我认为关于virtual成员也有一些局限,我认为它根本不适用于structs(至少在没有拳击的情况下,这对表演不利((。

所有这些都是MVC模式特有的吗?

MVC设计在每个web框架中都很常见,实际上不仅仅是ASP.NET Core或ASP.NET MVC,还有Python、PHP、Ruby等的MVC框架。

模型类和数据类在实际实现中如何相互关联?

  • 给定项目中的域实体(在本例中,为"用户"(:
    • Entity("data"(类将对象表示为业务对象,以及它在数据库中的存储方式
    • 每个视图模型("模型"(类代表业务域的特定视图(可以是只读或读写的(,通常是业务域对象图子集的快照,还包含页面本身的其他属性(如页面<title>、当前登录用户的详细信息等(。
      • 请注意,一个域实体类可以有多个视图模型类来表示它(请参见下文(。类似地,视图模型可以表示多个域实体对象(或者根本不表示(

例如:

  • 给定一个class User(实体类(:
    • A";用户列表";页面将具有class UserListPageViewModelIReadOnlyList<User>属性
    • 一个";编辑用户";页面将有一个class EditUserPageViewModel,其中包含每个可编辑用户属性/列/属性的属性。
      • 但它不能为模型绑定公开User类,因为这样攻击者就可以发送一个伪POST表单请求,指示模型绑定器覆盖Password字段
    • A";欢迎页面";视图模型还可以包含CCD_ 13属性,该属性包含加载的CCD_;布局";.cshtml文件(也称为Aspx中的.master"主页",或任何类型的通用HTML模板等(将用于填充"主页";欢迎John Doe"区域等

相关内容

  • 没有找到相关文章

最新更新