【发布时间】:2019-07-19 22:50:27
【问题描述】:
我有一个插入和更新实体的代码,但是逻辑非常相似:实例化一个控制器,验证de请求,如果错误,返回失败,否则执行操作。
/// <summary>
/// Method Add with similar code in Update method
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public PersonResponse Add(PersonInsertRequest item)
{
var result = new PersonResponse();
var controller = new PersonController(classmates);
result.Messages = controller.ValidateInsert(item);
if (result.Messages != null && result.Messages.Any())
{
result.Status = "failed";
}
else
{
result = controller.ExecuteInsert(item);
}
return result;
}
/// <summary>
/// Method Update with similar code in Add method
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public PersonResponse Update(PersonUpdateRequest item)
{
var result = new PersonResponse();
var controller = new PersonController(classmates);
result.Messages = controller.ValidateUpdate(item);
if (result.Messages != null && result.Messages.Any())
{
result.Status = "failed";
}
else
{
result = controller.ExecuteUpdate(item);
}
return result;
}
- 我曾尝试使用委托,但我无法使用它们,因为我无法将委托分配给 controller.ValidateInsert(item);
public class BaseLogic
{
public delegate List<Message> Validator(BaseRequest request);
public delegate BaseResponse Executor(BaseRequest request);
public BaseResponse Execute(BaseRequest request, Validator funcValidator, Executor funcExecutor)
{
var result = new BaseResponse();
result.Messages = funcValidator(request);
if (result.Messages != null && result.Messages.Any())
{
result.Status = "failed";
}
else
{
result = funcExecutor(request);
}
return result;
}
}
我想将 Add 方法和 Update 方法简化为另一个更通用的方法。
【问题讨论】:
-
您可以做的一件事是摆脱冗余代码,将函数组合到 AddOrUpdate() 中
-
我有很多继承的类具有相同的行为,以及更多的操作:验证执行
-
我会做什么来制作一些允许您指定操作的枚举参数。这样您的代码就易于阅读和使用。
-
“生产”代码是一个 API Rest,有很多具有最佳实践模式的方法:验证执行
-
我不明白你为什么要回答你自己的问题...你是在培养声誉吗?!