2010-06-14 2 views
0

Я ищу лучший метод для следующего вопроса, который у меня есть.Bast Practice: ASP.NET MVC Controller/Action с несколькими типами объектов

I current имеет большое количество объектов, которые все наследуют для одного базового объекта и все очень похожи. Есть ли доступное решение, позволяющее создать одно действие и одно действие редактирования без необходимости тиражировать много одного и того же кода.

Так, например, я мог бы человеку объект:

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 более общим для всех типов Лица?

Благодаря

ответ

0

Решение, которое я нашел, что работал для меня было использовать 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(); 
} 
+0

Я не уверен, что я считаю, что это хорошее применение динамики. Я думаю, что ответ Джона в этом случае будет более уместным. – Ryan

Смежные вопросы