如何最小化viewmodel中的代码到对象转换?

时间:2015-03-20 10:38:19

标签: c#

我的上下文中有一个对象:

abstract public partial class MyAbstractObject
{
    public int Id{set;get;}
    public string Name{set;get;}
}

public partial class MyChildObject: MyAbstractObject
{
    public string Details {set;get;} 
}

我有一个对象的视图模型:

public class MyAbstractViewModel
{
    public int Id{set;get;}
    public string Name{set;get;}
}

public class MyChildViewModel: MyAbstractViewModel
{
    public string Details {set;get;} 
}

现在将我的视图模型转换为我使用的对象:

public MyChildObject MakeChildObject(MyChildViewModel vm)
{
  var child = new  MyChildObject();
  child.Id = vm.Id;
  child.Name = vm.Name;
  child.Details= vm.Details;

  return child;
 }

MyAbstractObject属性中的问题。如果我有几个子对象,我为每个子对象创建一个MakeChildObject方法。所有这些方法对MyAbstractObject属性都有相同的代码行:

  child.Id = vm.Id;
  child.Name = vm.Name;

如何最小化我的代码?

3 个答案:

答案 0 :(得分:2)

考虑是否可以在您的情况下使用AutoMapper。它将根据属性名称自动映射不同类型的对象。它可能会节省您自己编写所有映射代码的时间。

https://github.com/AutoMapper/AutoMapper

然后你将像这样引导映射器:

Mapper.CreateMap<MyChildViewModel, MyChildObject>();

而不是您的方法MakeChildObject,您将使用以下内容:

MyChildObject vmMapped = Mapper.Map<MyChildViewModel>(vm);

答案 1 :(得分:1)

尝试以下代码示例来解决您的问题。

public class MyAbstractViewModel
{
    public int Id{set;get;}
    public string Name{set;get;}

  public void MakeChildObject(MyAbstractViewModel vm, MyAbstractObject child)
  {
    child.Id = vm.Id;
    child.Name = vm.Name;
  }
}

public class MyChildViewModel: MyAbstractViewModel
{
  public string Details {set;get;} 

  public MyChildObject MakeChildObject(MyChildViewModel vm)
  {
    var child = new  MyChildObject();
    this.MakeChildObject(this, child);

    child.Details= vm.Details;

    return child;
  }
}

答案 2 :(得分:0)

看看automapper http://automapper.org/

它会自动映射类似的命名属性。它还包括映射基础对象的功能。 也可以看看 This post