gpt4 book ai didi

asp.net-mvc - asp.net mvc 3 中的存储库和 ViewModel

转载 作者:行者123 更新时间:2023-12-02 02:21:05 29 4
gpt4 key购买 nike

这是我正在努力应对的情况。我有一个对象模型:

public class MyModel 
{
public string Prop1 {get; set;}
public string Prop2 {get; set;}
//etc

}

然后我有对象模型 View

public class MyModelView
{
public MyModel MyModelObject;

public SelectList PropToBeSelected1 {get; set;}
public SelectList PropTobeSelected2 {get; set;}
//etc

}

我还有 MyModelRepository 类,它为 MyModel 执行删除、更新操作。

到目前为止一切顺利。

问题:PropToBeSelected1 和 PropTobeSelected2 是下拉列表,其内容来自数据库。检索这些内容的方法是否应该放在我的 MyModelRepository 中?或者我应该为 ViewModel 创建另一个存储库吗?

谢谢。

最佳答案

首先,您真的不想在您的 viewModel 中使用类似 domian 的对象。你的 viewModel 应该是干净的,只有基元(比如字符串、整数……等等)。所以我建议使用 a AutoMapper将您的两个字符串 Prop 映射到您的 viewModel。

对于选择列表,有很多方法可以解决这个问题,但我可以想象,如果它们是属性列表,那么它们就不是实际实体,而是值对象。在这种情况下,为他们创建一个存储库是多余的,并且寄宿生糟糕的设计。

我会将属性列表的“获取”放在您的 MyModelRepository 中。有点像

_myModelRepository.getProperties1For(myModel);

然后再次打开 AutoMap 以获取您的选择列表。

编辑:就像@M.Radwan 指出的复杂域模型一样,我将制作 viewModels insdie viewModels 以便于映射。

领域模型--

public class User : Entity
{
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
public string Zip { get; set; }
}

将映射到

public class DetailsViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public AddressViewModel Address { get; set; }

public class AddressViewModel
{
public string Street { get; set; }
public string Zip { get; set; }
}
}

根据我们的经验,这是向您的 viewModel 添加任何复杂性的唯一原因。虽然我们会将 SelectLists 放在我们的 viewModel 中,但最近我们一直在使用内部 viewModels 的 IEnumerables 并调用自定义 EditorFor 或 DisplayFor 将它们变成下拉列表/复选框/单选按钮列表。

关于asp.net-mvc - asp.net mvc 3 中的存储库和 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128845/

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