韧皮做法:与多个对象类型ASP.NET MVC控制器/行动(Bast Practise: ASP.N

2019-11-03 20:11发布

我找了以下问题我有最好的方法。

我现在有大量的,所有继承一个基本对象都非常相似的对象。 是否有可用的解决方案将允许无需复制了很多相同的代码创建一个动作和一个编辑操作。

因此,例如我可能有一个人对象:

public class PersonBase
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

然后,我将有一个数量的对象从继承的Person ,如:

public class SalesPerson : PersonBase
{
  public double TotalCommission { get; set; }
}

public class Customer: PersonBase
{
  public string Address { get; set; }
}

现在目前我有这将创建一个客户群的行动:

[HttpPost]
public virtual ActionResult Create(FormCollection collection)
{
  var person = new PersonBase();

  UpdateModel(person);

  if ( Model.IsValid && person.IsValid )
  {
    // Save to the db
  }

  return View();
}

现在,我可以很容易地复制这些代码并修改它,所以我可以创建一个销售人员和客户,但我会根据大量对象的关闭PersonBase,这将是很多类似的代码,我想避免重复。

正在创建行动更通用于所有类型的人的方法是什么?

谢谢

Answer 1:

我找到了解决方案,为我工作是使用dynamic从C#4,所以,我的代码如下所示:

[HttpPost]
public virtual ActionResult Create(int type, FormCollection collection)
{
      dynamic person = new PersonBase();

      if ( type == 1 )
        person = new SalesPerson();
      else if ( type == 2 )
        person = new Customer();

      UpdateModel(person);

      if ( Model.IsValid && person.IsValid )
      {
        // Save to the db
      }

      return View();
}


文章来源: Bast Practise: ASP.NET MVC Controller/Action with multiple object types