如何避免签名略有不同的一次性方法的代码重复

时间:2010-03-30 17:46:07

标签: .net

我在C#中使用供应商API包装了许多功能。每个包装函数都符合模式:

public IEnumerator<IValues> GetAggregateValues(string pointID, DateTime startDate, DateTime endDate, TimeSpan period) {
   // Validate Data
   // Break up Requesting Time-Span
   // Make Requests
   // Read Results (through another method call
}

6个请求中有5个是聚合数据提取并具有相同的签名,因此将它们放在一个方法中并传递聚合类型以避免代码重复是有意义的。但是,第6种方法遵循完全相同的模式,具有相同的结果集,但不是聚合,因此没有时间段传递给函数(更改签名)。

有没有一种优雅的方法来处理这种情况而无需编写一次性函数来处理非聚合请求?

2 个答案:

答案 0 :(得分:2)

肯定有办法解决这个问题:

  1. 使时间段参数可以为空(DateTime?或Nullable&lt; DateTime&gt;)
  2. 创建一个结构或类来保存函数的“参数”,包括根据需要提供更多或更少的信息。
  3. 将现有函数中的代码拉入几个较小的函数中,然后将它们放回到您需要的两个独立函数中,避免大部分复制,同时保持完全独立的函数/签名。
  4. 请注意,对于1和2,您需要检查这些条件,并根据值使用/跳过函数内的一些代码。

答案 1 :(得分:0)

我认为最好的方法是创建AggregateArgs类来保存请求的参数。你可以有这样的签名:

public IEnumerator<IValues> GetAggregateValues(AggregateArgs args);

如果您不需要,也可以将TimeSpan.Zero发送到您的方法。