避免代码复制
Avoid code replication
在我的代码中,我有许多具有此签名的函数(参数 + return 类型),它们都使用相同的 try-catch
子句。
public ActionResult methodName(int id)
{
try
{
//Some specific code here
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
catch (Exception ex)
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message);
}
}
现在,这是一遍又一遍地复制,我知道复制是不好的。
发生这种情况的原因是因为我希望代码能够 return 多个 HttpStatusCodeResult
但我不知道更好的方法。
在这个例子中,我 return 一个内部服务器错误和一个 OK 答案。但是,如果我想 return 另一种类型的错误怎么办?
public ActionResult methodName(int id)
{
try
{
//Some specific code here
if(conditionA)
return return new HttpStatusCodeResult(HttpStatusCode.NotFound, "No Hamsters found!")
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
catch (Exception ex)
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message);
}
}
在我的代码中是否有一种无需复制即可拥有行为的模块化方式?有没有我可以使用的设计或架构模式?如果有,是哪一个?
你可以像这样分解一点:
public static class Helper
{
public static ActionResult TryCatch(Func<ActionResult> funk)
{
try
{
if (funk != null)
{
ActionResult result = funk();
if (result != null)
return result;
}
}
catch (Exception ex)
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message);
}
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
然后这样称呼它:
public ActionResult methodName(int id)
{
return Helper.TryCatch(() =>
{
//Some specific code here
if(conditionA)
return return new HttpStatusCodeResult(HttpStatusCode.NotFound, "No Hamsters found!")
return null;
};
}
在我的代码中,我有许多具有此签名的函数(参数 + return 类型),它们都使用相同的 try-catch
子句。
public ActionResult methodName(int id)
{
try
{
//Some specific code here
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
catch (Exception ex)
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message);
}
}
现在,这是一遍又一遍地复制,我知道复制是不好的。
发生这种情况的原因是因为我希望代码能够 return 多个 HttpStatusCodeResult
但我不知道更好的方法。
在这个例子中,我 return 一个内部服务器错误和一个 OK 答案。但是,如果我想 return 另一种类型的错误怎么办?
public ActionResult methodName(int id)
{
try
{
//Some specific code here
if(conditionA)
return return new HttpStatusCodeResult(HttpStatusCode.NotFound, "No Hamsters found!")
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
catch (Exception ex)
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message);
}
}
在我的代码中是否有一种无需复制即可拥有行为的模块化方式?有没有我可以使用的设计或架构模式?如果有,是哪一个?
你可以像这样分解一点:
public static class Helper
{
public static ActionResult TryCatch(Func<ActionResult> funk)
{
try
{
if (funk != null)
{
ActionResult result = funk();
if (result != null)
return result;
}
}
catch (Exception ex)
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message);
}
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
然后这样称呼它:
public ActionResult methodName(int id)
{
return Helper.TryCatch(() =>
{
//Some specific code here
if(conditionA)
return return new HttpStatusCodeResult(HttpStatusCode.NotFound, "No Hamsters found!")
return null;
};
}