0

我正在审查/重构一些代码,但遇到了我不喜欢的相互依赖关系,但我不确定在 C# 中解决此问题的最佳方法是什么。我的问题的本质是在一个文件中我有:

class MyObject
{
  public string Name {get;set;}
  public int? Age {get;set;}
}

public interface IConnection
{
  void Connect(string user,string pw,Action<MyObject[]> onConnect);
  void Disconnect();
}

然后在另一个文件中:

public class ConcreteDataProvider : IConnection
{
  public void Connect(string user,string pw,Action<MyObject[]> onConnect)
  {
    //...
    IEnumerable<MyObject> collection = ...
    onConnect( collection.ToArray() );
  }
}

我对这个设计的问题MyObject是特定于这个具体的数据提供者。我不想在IConnection.

我的想法是重构IConnection.Connect()看起来像:

void Connect(string user,string pw,Action<Object[]> onConnect);

然后在ConcreteDataProvider执行中onConnect我将数组转换为MyObject[]. (从Unable to cast object of type 'System.Object[]' to 'MyObject[]' 看来,这意味着我需要使用Array.ConvertAll

这是一个糟糕的设计,会回来困扰我吗?


顺便说一句,调用ToArray()触发数据下载,我不想onConnect()在它完成之前调用。在幕后它也触发了实际的连接;在执行第一个查询之前,我不知道连接是否有效并且是否正常工作。这就是为什么我不想传递IEnumerableOnConnect(),并让它调用 to ToArray()

4

1 回答 1

4

使用泛型怎么样?

public interface IConnection<T>
{
  void Connect(string user, string pw, Action<T[]> onConnect);
  void Disconnect();
}
于 2012-11-26T09:47:28.317 回答