MVC:使用模型列表构建视图的最佳方式(C# 窗体)
MVC: Best way to build a View with a list of Models (C# Forms)
嗨!
我是 MVC 的新手,我不知道我是否按照我尝试的方式做,所以我需要你的帮助。
考虑一个带有列表视图的普通表单(仅作为示例)。可以说列表视图可以容纳多个学生对象。这个学生对象只包含一个姓名和一个身份证号码(正如我提到的非常简单)。
class student : IModel {
public string Name { get; set; }
public string IDNumber { get; set; }
}
interface IModel {
string Name { get; set; }
string IDNumber { get; set; }
}
当我使用类似这样的东西作为我的模型并且我想要一个如上所述的视图时,将我的 "model" 封装在某种元模型中是个好主意吗?
类似于:
//in this example the IModel definition is not part of the student class
class studentModel : IModel {
List<student> Students { get; set; }
}
我希望你知道我想解释什么。
我必须为我的模型构建一个容器,以便能够将它绑定到视图(因此每个视图只有一个模型)。
但是如果我这样做的话,我的 Student 对象不是 IModel 的一部分,而 studentModel 是(例如添加 Observer 功能)。但是,如果可以的话,我应该如何在视图中访问我的学生对象。当然我可以访问该组件,但这是一个好方法吗?在模型中构建类似模型的东西更好吗?
我有点困惑,只要在一个视图中有一个学生对象就一切正常,否则我的大脑会丢失一些信息:)
我不会创建接口 (IModel
),而只会创建 Student
class。当您想要建立一些通用行为的 "contract" 时,一个接口是有意义的(一般来说),该接口的多个实现者应该使用。
在视图方面,视图应该接受的模型类似于 List<Student>
(注意大写 S),仅此而已。
附带说明一下,当您需要接口时,一个很好的例子是当您想要强制执行某些共同特征 (属性) 或功能(方法)时。假设您的系统不仅有学生,还有教授和行政人员。您可以创建一个仅包含 Id
的 IPerson
接口作为强制通用 属性,然后您将拥有 classes Student
、Professor
、 Staff
所有实现 IPerson
,然后所有这些都将被语言强制执行,以具有 Id
属性。在这种情况下,您甚至可以构建一个列表视图,例如其模型为 List<IPerson>
的人(但是当然您必须进行强制转换才能访问每个 属性 不是 Id
...).
这是一个相当宽泛的问题,但如果您想在视图中访问的只是一个 List<Foo>
,那么将其设为模型类型并没有错。您不需要将其封装在其他对象中。
另外(正如 Ofer 刚刚发布的那样)我不确定 IModel
在这里的目的是什么。标准做法是让您的视图模型存在的唯一目的是包含给定视图的数据。界面意味着您打算将其用于其他用途。
编辑:如果您喜欢这个答案,请接受最先发布且完全相同的 Ofer 的答案。
嗨!
我是 MVC 的新手,我不知道我是否按照我尝试的方式做,所以我需要你的帮助。
考虑一个带有列表视图的普通表单(仅作为示例)。可以说列表视图可以容纳多个学生对象。这个学生对象只包含一个姓名和一个身份证号码(正如我提到的非常简单)。
class student : IModel {
public string Name { get; set; }
public string IDNumber { get; set; }
}
interface IModel {
string Name { get; set; }
string IDNumber { get; set; }
}
当我使用类似这样的东西作为我的模型并且我想要一个如上所述的视图时,将我的 "model" 封装在某种元模型中是个好主意吗?
类似于:
//in this example the IModel definition is not part of the student class
class studentModel : IModel {
List<student> Students { get; set; }
}
我希望你知道我想解释什么。
我必须为我的模型构建一个容器,以便能够将它绑定到视图(因此每个视图只有一个模型)。
但是如果我这样做的话,我的 Student 对象不是 IModel 的一部分,而 studentModel 是(例如添加 Observer 功能)。但是,如果可以的话,我应该如何在视图中访问我的学生对象。当然我可以访问该组件,但这是一个好方法吗?在模型中构建类似模型的东西更好吗?
我有点困惑,只要在一个视图中有一个学生对象就一切正常,否则我的大脑会丢失一些信息:)
我不会创建接口 (IModel
),而只会创建 Student
class。当您想要建立一些通用行为的 "contract" 时,一个接口是有意义的(一般来说),该接口的多个实现者应该使用。
在视图方面,视图应该接受的模型类似于 List<Student>
(注意大写 S),仅此而已。
附带说明一下,当您需要接口时,一个很好的例子是当您想要强制执行某些共同特征 (属性) 或功能(方法)时。假设您的系统不仅有学生,还有教授和行政人员。您可以创建一个仅包含 Id
的 IPerson
接口作为强制通用 属性,然后您将拥有 classes Student
、Professor
、 Staff
所有实现 IPerson
,然后所有这些都将被语言强制执行,以具有 Id
属性。在这种情况下,您甚至可以构建一个列表视图,例如其模型为 List<IPerson>
的人(但是当然您必须进行强制转换才能访问每个 属性 不是 Id
...).
这是一个相当宽泛的问题,但如果您想在视图中访问的只是一个 List<Foo>
,那么将其设为模型类型并没有错。您不需要将其封装在其他对象中。
另外(正如 Ofer 刚刚发布的那样)我不确定 IModel
在这里的目的是什么。标准做法是让您的视图模型存在的唯一目的是包含给定视图的数据。界面意味着您打算将其用于其他用途。
编辑:如果您喜欢这个答案,请接受最先发布且完全相同的 Ofer 的答案。