MVC模型设置

时间:2013-05-11 07:29:01

标签: asp.net-mvc vb.net c#-4.0

我使用纯ado.net进行数据访问。我想知道做以下事项的最佳做法。

我有一个通用产品类....

Class ProductViewModel

 Property ItemID as int
 Property Title as string
 ' etc, all other properties.......

End Class

然后我有Orders Class

Class OrdersViewModel

 Public OrderNumber as string
 Public ShipToAddress as string
 ' etc all properties

End Class

我有10个其他泛型类要用作ViewModel。

我的问题是针对每个通用类,我需要在我的VIEW中提取数据....例如GetProductID()函数将返回ProductID,GetOrderID将返回 OrderID 我应该在哪个类中执行实际的数据访问操作?

我应该如何构建我的类,这样我可以更轻松地访问视图中的数据。

由于

2 个答案:

答案 0 :(得分:2)

  

我应该在哪个类中执行数据访问

两者都没有,你通常会在你的视图/数据访问之间添加一个抽象层,并从那里拉出与后端相关的任何东西,例如。

Class ProductRepository

Function GetById(ByVal Id As Integer) As Product
    ' Pull product from DB 
End Function

End Class

这被称为Repository Pattern。获得存储库后,您可以从后端和数据库中提取数据。在传递给视图之前,在控制器级别填充视图模型,例如

Public Class ProductsController Inherits System.Web.Mvc.Controller

Function Index(ByVal Id As Integer) As ActionResult
    Dim repo As New ProductRepository()
    ' pull product from DB 
    Dim p As Product = repo.GetById(Id)
    ' populate view model
    Dim model As New ProductViewModel()
    model.ItemID = p.ItemID
    model.Title = p.Title
    ...
    ' pass to view
    Return View(model)
End Function

End Class

以这种方式填充视图模型可能会非常繁琐,特别是如果你有加载,我倾向于让像AutoMapper这样的工具为我做。

答案 1 :(得分:0)

我会做以下事情:

  1. 类调用OrderRepository,您可以在其中对数据库进行所有数据访问

  2. 名为OrderService的类,您可以在其中执行所有业务规则

  3. Controller只能调用OrderService类而不能调用OrderRepository类。

  4. 控制器应将ViewModel返回到视图

  5. 希望这有帮助