asp.mvc模型设计

时间:2011-01-04 15:50:37

标签: asp.net-mvc asp.net-mvc-2 design-patterns

我对MVC很陌生,我正在寻找一种设计模型的方法。

我有MVC网站项目和另一个负责数据访问和构建业务对象的类库。

如果我在该程序集中有一个名为Project的类,它是一个业务对象,我需要在视图中显示所有项目......我应该创建另一个模型类Project吗?在这种情况下,类将是相同的。 做一个新的模特课我能获得一些东西吗? 我不喜欢在视图中引用来自另一个dll的对象...但我不喜欢复制代码。

你遇到过同样的问题吗?

4 个答案:

答案 0 :(得分:3)

我通常使用模型的现有类和自定义类的组合,具体取决于视图与数据存储区中实际类的映射程度。对于纯crud页面,使用数据类作为模型是完美的。在现实世界中使用虽然通常最终需要一些其他数据。我发现组合它们最简单的方法就像

// the class from the data store
public class MyDataObject {
    public string Property1 {get;set;}
    public string Property2 {get;set;}
    }

// model class in the MVC Models folder
public class MyDataObjectModel {
    public MyDataObject MyDataObject {get;set;}
    // list of values to populate a dropdown for Property2
    public List<string> Property2Values {get;set;}
    // related value fetched from a different data store
    public string Property3 {get;set;}
    }

我也有很多模型类只是一组表单字段 - 基本上对应于来自特定表单的操作参数,而不是实际上最终存在于数据库中的任何内容。

答案 1 :(得分:2)

如果它是完全相同的项目,那么显然不需要复制Project类,只需在视图中使用它。但在现实生活中,视图通常具有特定要求,在MVC应用程序中定义视图模型类是一种很好的做法。然后,控制器将在模型类和要传递给视图的视图模型之间进行映射。

答案 2 :(得分:1)

您可能会对此发现不同的意见。我会告诉你我的:

默认情况下,我倾向于重用该对象。如果视图的需求发生变化,并且不再需要业务对象中的大部分/全部数据,那么我将创建一个单独的视图。我永远不会改变业务对象以适应视图本身。

如果您需要业务对象中的大部分/全部信息,并且需要其他数据,那么我将创建一个视图,该视图包含对业务对象的引用,并且还具有您需要的其他数据点的属性。 p>

重用业务对象的一个​​好处是,根据您使用的数据访问技术,您可以从验证中重用。对于isntance,ASP.NET MVC 3与Entity Framework相结合很好,因为它们都使用System.ComponentModel命名空间中的属性进行验证。

答案 3 :(得分:1)

这取决于你对模特的意思。在我通常使用的架构中,我有我的域模型,它是一个单独的类库中的类的集合。我使用DataAnnotations并内置验证,以便在保存时自动验证我的模型。

然后是View模型,我放在我的MVC项目中。视图模型仅具有与视图相关的信息。我也在这里使用数据注释,因为MVC会自动使用它们进行验证。

以这种方式拆分模型的原因是您并不总是在视图中使用域模型的每一部分。这意味着您要么必须在后端重建数据,要么必须将其存储在隐藏字段中。我也不喜欢,