我有几种具有相同逻辑的方法,但我看不到如何避免重复?每种方法内部调用另一个服务,否则内部服务调用之前和之后的逻辑是相同的,请参见下面的代码段。
任何帮助!
非常感谢,
代码
public List<Customer> GetCustomerDetail(int id)
{
_log.debug("xxx");
if(something)
{
_log.debug("yyy");
}
var results = _internalService.GetCustomer(id);
if(results == null)
{
_log.debug("no results");
}
return results;
}
public List<Customer> GetCompanyDetail(int id)
{
_log.debug("xxx");
if(something)
{
_log.debug("yyy");
}
var results = _internalService.GetCompany(id);
if(results == null)
{
_log.debug("no results");
}
return results;
}
...
使用委托:
public List<Customer> GetCustomerDetail(int id)
{
return DoIt( () => _internalService.GetCustomer(id) );
}
public List<Customer> GetCompanyDetail(int id)
{
return DoIt( () => _internalService.GetCompany(id) );
}
private T DoIt<T>( Func<T> func )
{
_log.debug("xxx");
if(something)
{
_log.debug("yyy");
}
var results = func();
if(results == null)
{
_log.debug("no results");
}
return results;
}
几个选项,具体取决于重复密度:
- 什么也不做。二三个dup可能不值得花时间花费时间
- 如果需要,制作一些字符串常数/可读字段。这将从代码中删除一些魔术字符串,并允许您整齐地更改它们。
- 将记录方法添加到(2),如果您重复执行重复。