gpt4 book ai didi

c# - 混淆模型与 View 模型

转载 作者:IT王子 更新时间:2023-10-29 04:24:17 28 4
gpt4 key购买 nike

我正在学习 ASP.NET MVC 并下载了几个示例应用程序。 MusicStore 等...

我来自 wpf 背景,我们有 MVVM 模式。我注意到他们使用了模型和 ViewModel 的概念。

在 MVVM 中很清楚,您将 View 绑定(bind)到 ViewModel,将模型注入(inject) viewModel。在 MVC 中,你有一个 Controller ,但我不确定并且很困惑所有这些是如何联系在一起的,因为我看不到注入(inject)到 ViewModel 中的模型

我有以下结构

  1. MyCompany.Entities.dll(所有模型都在此处)EG 产品
  2. MyCompany.Dal.dll(所有存储库都在此处)
  3. MyCompany.Services.dll(由 MyCompany.WebUI.Controller 调用 MyCompany.Dal 调用)
  4. 我的公司.WebUI.MyApp
  5. MyCompany.Tests

从一些示例中,我看到您的模型充当 ViewModel。我说得对吗?

让我们拿一个 Controller ,我有类似的东西

public class ProductController
{
public ProductController(IProductRepository productRepository)
{
//omitted as not relevant
}
}
public class ProductVM
{
public ProductVM()
{
// Shouldn't we inject the model here RG Product
}
}

是否有一些我可以引用的 N 层示例?ViewModel 的概念在 MVC 中是否有效?标准是什么?

感谢您的任何建议。

最佳答案

使用 ViewModels简化 View 。

例如,您可能有一个包含产品、订单、客户等的深层对象图 - 特定 View 需要来自每个对象的一些信息。

ViewModel 提供了一种将 View 所需的信息聚合到单个对象中的方法。

ViewModels 还允许数据注释和验证之类的事情 - 这不属于您的模型,因为您的模型应该保持“特定于域”。

但实际上,ViewModel 只不过是域对象的简单包装器。

使用 AutoMapper 之类的工具轻松地在 ViewModel 和领域模型之间来回映射。

就我个人而言,我总是绑定(bind)到我的 View 中的 ViewModel,从不绑定(bind)到域模型,即使它是单个对象。为什么?好吧,我喜欢用 UIHints、验证、数据注释来装饰我的 ViewModel。就像您的域模型使用特定于域的规则和业务逻辑来丰富一样,您的 ViewModel 也应该使用特定于 UI 的逻辑来丰富。

如果您只有一个对象与您的域模型的 1-1 表示,那么您就错过了 ViewModels 的重点。

仅向 ViewModel 添加特定 View 所需的内容,仅此而已。

Controller 操作示例

public ActionResult CustomerInfo(int customerId)
{
// Fetch the customer from the Repository.
var customer = _repository.FindById(customerId);

// Map domain to ViewModel.
var model = Mapper.Map<Customer,CustomerViewModel>(customer);

// Return strongly-typed view.
return View(model);
}

关于c# - 混淆模型与 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6185508/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com