gpt4 book ai didi

c# - MVC 中的 View 是否应该了解模型数据?

转载 作者:行者123 更新时间:2023-11-30 17:34:18 25 4
gpt4 key购买 nike

我已经研究了一段时间 MVC 和类似的问题,如 thisthis .

但是,他们没有回答我的问题。在很多 MVC 示例(ASP.NET MVC 和 JAVA MVC)中,它们通常为模型提供字段 E.G(姓名、年龄等),然后允许 View “读取”这些字段。

但据我所知,View 不应该知道 Model,因为如果 View 知道,那么它就不是(正确地)封装的。

然而,图片显示 View 知道模型以显示正确的数据。

enter image description here

如果我理解正确的话,模型可以是系统的业务逻辑,而 View 不应该连接到它。

假设我的模型从数据库中获取数据,那么它仍然是我的模型,它是我的业务逻辑而不是数据库,或者我想错了吗?

所以我的问题是

  • View 是否应该知道 Model 才能使用正确的数据?
  • Controller 的工作是从 E.G 数据库中获取数据并从中创建模型,而 View 应该使用模型数据进行显示吗?
  • 什么是模型业务逻辑? (请不要用字段来解释)

最佳答案

很多内容都可以解释。有多种方法,最终选择最适合您的方法。如果有帮助,我的方法如下。

View 是否应该知道 Model 才能使用正确的数据?是的。该 View 有一个模型导入指令,用于在呈现时绑定(bind)到它。如果 View 对它正在访问的模型一无所知,那么它如何绑定(bind)到数据。

Controller 的工作是从 E.G 数据库中获取数据并从中创建模型,而 View 应该使用模型数据进行显示吗?不, Controller 不应该与数据层的实现无关。 Controller 的唯一工作应该是调用构建 View 模型所需的服务。

什么是模型业务逻辑? (请不要用字段来解释)不确定“模型业务逻辑”这个确切的术语。模型可用于描述领域模型或在这种情况下查看模型。业务逻辑是您对由某些服务填充的业务或域模型对象执行的操作。

如您所说,我处理 ViewModel 和业务逻辑的方式是分离领域模型,例如客户或订单在单独的 dll 中,并让服务填充这些域对象。然后,您的 View 模型就变成了域模型对象的组合。

总而言之, Controller 会调用使用数据层的服务,这些数据层会返回您填充的域对象。然后这些可以用于填充您的 View 模型,然后由 View 使用。

我在下面添加了一个非常简单的方法,希望能为您指明正确的方向。

public class MyController
{
[HttpGet]
public ViewResult GetCustomer(int customerID)
{
var myViewModel = new CustomerViewModel();
var myService = new MyServiceLayer();

var myCustomerDetails = myService.GetCustomerDetails(customerID);

myViewModel.Customer = myCustomerDetails;

return View("CustomerDetails", myViewModel);
}
}

public class CustomerViewModel
{
public CustomerDomainObject Customer { get; set; }
}


public class CustomerDomainObject
{
public string Name {get;set;}
}

public class MyServiceLayer
{
public CustomerDomainObject GetCustomerDetails(int customerID)
{
var myCustomer = new CustomerDomainObject();
var dataLayer = new MyDataLayer();
var myCustomerData = dataLayer.GetCustomerDetails(customerID);

var myDataRow = myCustomerData.Tables[0].Rows[0];
myCustomer.Name = myDataRow["Name"].ToString();

return myCustomer;
}
}

public class MyDataLayer
{
public DataSet GetCustomerDetails(int customerID)
{
//Execute proc etc...
return new DataSet();
}
}

关于c# - MVC 中的 View 是否应该了解模型数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42695467/

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