- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前通过将模型对象注入(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/
我在使用 Heroku 时遇到问题,当我尝试部署我的应用程序时,它没有运行 run assets:precompile而且我还没有在本地预编译我的 Assets ,我在 Git 中没有 list 文件
(这是为您提供围绕我的问题的背景信息。您可以跳到“问题”并阅读该内容,然后如果您想直接进入主题,则可以返回并浏览背景知识.抱歉,这是一面文字墙!) 我需要将一堆非常非常糟糕的 JSON 存储在数据库中
我是一名优秀的程序员,十分优秀!