現在、次のように、「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; }
}
コントローラー内 - 私の場合は、'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);
}