我目前正在通过在我的'ViewModelProduct'对象的构造函数中注入一个Model对象,在WebApi中实现ViewModels,如下所示:
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中-以我为例,我想创建'ViewModelProduct'实例的'ProductController'。我想尽可能减少紧密耦合。
我通过使用BootStrapper类中的Unity将“ IFacade”对象注入到控制器的构造函数中。
真正的问题是,我目前有一个静态方法,只是返回“ 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)就足够了。
您的其他选择虽然不是很好。这是一个视图模型,一个IProduct的DTO,使用DI容器是一种过大的手段,没有任何好处。顺便说一句,我认为视图模型不需要抽象。作为数据结构,它没有实际行为(最多有一些帮助者),这并不意味着您会有多种形式。
关于c# - Web API ViewModel模式中可能存在不良做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20099755/