c# - Web API ViewModel 模式中可能存在不良实践?

标签 c# asp.net-web-api asp.net-mvc-viewmodel view-model-pattern

我目前正在 WebApi 中实现 ViewModel,方法是将 Model 对象注入(inject)到“ViewModelProduct”对象的构造函数中,如下所示:

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/

相关文章:

c# - 写入和读取应用程序配置设置

c# - JSON 对象创建 PushStreamContent

asp.net-web-api - ASP.NET Web API HTTP 删除 405 方法不允许

c# - ViewModel没有通过POST方法传递回 Controller

C#简单开源应用

c# - 如何从 RSS 提要项中获取所有可能的图像 URL?

c# - 是否有与 Java 的 LineNumberReader 等效的 C#?

file-upload - 从 MVC 将带有附加表单数据的文件上传到 Web Api

c# - 在ViewModel、ASP.net MVC中定义 "Model"类型的属性好不好

c# - 在 Razor MVC3 中使用 ViewModel 在单个 View 中显示多个模型( View 中只有详细信息)