gpt4 book ai didi

c# - Web API ViewModel 模式中可能存在的不良做法?

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:11 24 4
gpt4 key购买 nike

我目前通过将模型对象注入(inject)“ViewModelProduct”对象的构造函数来在我的 WebApi 中实现 ViewModel,如下所示:

public class ViewModelProduct
{
private IProduct _product;

private int _ID;
private string _name;

public ViewModelProduct(IProduct product)
{
_product = product;

ID = _product.ID;
Name = _product.Name;
}

public int ID
{
set { _ID = _product.ID; }
get { return _ID; }
}

public string Name
{
set { _name = value; }
get { return _name;}
}

public string Description
{
set { _product.Description = value; }
get { return _product.Description; }
}

在 Controller 中 - 在我的例子中,'ProductController' 我想创建一个 'ViewModelProduct' 的实例。我想尽可能减少紧密耦合。

我通过使用来自 BootStrapper 类的 Unity,将“IFacade”对象注入(inject)到我的 Controller 的构造函数中。

这里真正的问题是 我目前有一个静态方法,它只返回“ViewModelProduct”对象的一个​​新实例,我将模型发送到该对象以在其构造函数中进行设置,如图所示。 这是不好的做法吗?我想不出如何使用 Unity 创建实例,因为我不知道在运行前模型会是什么

public List<ViewModelProduct> GetProducts()
{
var V2Ops = _facade.GetOperatorV2();

var productList = V2Ops.GetProducts();

List<ViewModelProduct> listObjects = new List<ViewModelProduct>();

foreach (var product in productList)
{
//*****Setting a new instance from a static method.*****
var viewModel = CreateNewViewModelV2.CreateViewModel(product);

listObjects.Add(viewModel);
}

return listObjects;
}

返回新“ViewModelProduct”实例的静态类:

public static ViewModelProduct CreateViewModel(IProduct passedProductModel)
{
return new ViewModelProduct(passedProductModel);
}

最佳答案

这不是坏习惯,实际上我一直这样做,但作为一种扩展方法(针对 IProduct)。但是,在这种特殊情况下,您真的需要工厂方法吗?只需创建一个新的 ViewModelProduct(product) 就足够了。

不过您的其他选择不太好。它是一个 View 模型,一个 IProduct 的 DTO,使用 DI 容器是一种矫枉过正的方式,没有任何好处。顺便说一句,我认为不需要抽象 View 模型。作为数据结构,它没有真正的行为(至多是一些助手),你不会有它的多种变体。

关于c# - Web API ViewModel 模式中可能存在的不良做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099755/

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