如何避免重复代码(设计模式)

时间:2016-06-16 23:09:39

标签: c# design-patterns

我在类中有几个方法具有相同的逻辑,但我看不出如何避免重复?每个方法在内部调用另一个服务,但内部服务调用之前和之后的逻辑是相同的,请参阅下面的代码片段。

任何帮助表示赞赏!

非常感谢,

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;
}

...

2 个答案:

答案 0 :(得分:5)

使用代表:

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;
}

答案 1 :(得分:0)

有几种选择,具体取决于复制密度:

  1. 什么都不做。两三个重复可能不值得花时间花在他们身上
  2. 如果需要,可以创建一些字符串常量/只读字段。这将从代码中删除一些魔术字符串,并允许您巧妙地更改它们。
  3. 向(2)添加日志记录方法,如果您重复使用,则建议使用该方法。