我有以下类层次结构
public abstract class OperationItemViewModel
{
public int Id {get;set;}
public int OperationId {get;set;}
public int OperationItemTypeId {get; protected set;}
//Прочие свойства
}
public class ProgramViewModel : OperationItemViewModel
{
public ProgramViewModel() { this.OperationItemTypeId = 6;}
}
public class SetupMapViewModel : OperationItemViewModel
{
public SetupMapViewModel() { this.OperationItemTypeId = 3;}
}
和下一个控制器
public class OperationController: Controler
{
public ActionResult AddProgram(int operationId){}
[HttpPost]
public ActionResult AddProgram(ProgramViewModel model, HttpPostedFileBase downloadableFile)
{
if(ModelState.IsValid)
{
_operationService.AddItem(model);
}
}
public ActionResult AddSetupMap(int operationId){}
[HttpPost]
public ActionResult AddSetupMap(SetupMapViewModel model, HttpPostedFileBase downloadableFile)
{
if(ModelState.IsValid)
{
_operationService.AddItem(model);
}
}
}
方法签名AddItem如下所示:
public void AddItem<T>(T item) where T: OperationItemViewModel
{
var operationItem = //преобразовываем `ViewModel` в `DAO`
_context.Set<OperationItem>().Add(operationItem);
_context.SaveChanges();
}
在我的例子中,一切正常,但我不喜欢 Add( Program/SetupMap/... ) 方法主要是复制粘贴。
是否有可能以某种方式优化此代码 - 即 摆脱方法内部的重复?
选项1。
选项 2
我们去除了
OperationItemViewModel抽象性并去除了层次结构。选项 3。
你可以用 ModelBinder 想到一些东西: