代码之家  ›  专栏  ›  技术社区  ›  lancscoder

Bast practice:具有多种对象类型的ASP.NET MVC控制器/操作

  •  0
  • lancscoder  · 技术社区  · 14 年前

    我现在有很多对象,它们都是为一个基本对象继承的,而且都非常相似。有没有一个可用的解决方案允许一个创建操作和一个编辑操作,而不需要复制大量相同的代码。

    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的大量对象,这将是一个类似的代码,我想避免很多重复。

    如何使Create操作对所有类型的人都更通用?

    1 回复  |  直到 14 年前
        1
  •  0
  •   lancscoder    14 年前

    我发现对我有效的解决办法是使用 dynamic

    [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();
    }