我使用纯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 。 我应该在哪个类中执行实际的数据访问操作?
我应该如何构建我的类,这样我可以更轻松地访问视图中的数据。
由于
答案 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)
我会做以下事情:
类调用OrderRepository,您可以在其中对数据库进行所有数据访问
名为OrderService的类,您可以在其中执行所有业务规则
Controller只能调用OrderService类而不能调用OrderRepository类。
控制器应将ViewModel返回到视图
希望这有帮助