通用接口问题

时间:2010-03-11 10:20:24

标签: c# .net interface application-design

我希望为我的所有网格相关任务提供一个界面。任务实现此界面:

public interface IDataForGrid<T>
{
    IGridResponse<T> GetList(IGridRequest request);
}

T类型始终是DTO类。我无法为这个DTO创建一个通用界面,因为它们没有任何共同点。只是具有特定属性的哑DTO。

我想像这样使用它:

public class Service1
{
    public IGridResponse CreateResponse(IGridRequest request)
    {

        ...
        IDataForGrid<T> aa;

        if(request == 1) aa = new CustomerGridData;
        if(request == 2) aa = new OrderGridData;

        var coll = aa.GetList();
    }
}

public class CustomerGridData : IDataForGrid<CustomerDTO>
{
   ...
}

问题是我不知道该放什么而不是T.

2 个答案:

答案 0 :(得分:3)

您也可以使方法通用,以便可以根据需要替换T:

public class Service1
{
  public IGridResponse<T> CreateResponse<T>(IGridRequest request)
  {
    ...
    IDataForGrid<T> aa;

    if(request == 1) cg = new CustomerGridData;
    if(request == 2) og = new OrderGridData;

    var coll = aa.GetList();
  }
}

答案 1 :(得分:3)

也许我想念你,但是你不能成为一个超级班,所有的DTO都像BaseDTO

然后像这样使用它:

public class CustomerDTO : BaseDTO {}

IDataForGrid<BaseDTO> aa;

var coll = aa.GetList();

这样,您的coll变量的类型为IGridResponse<BaseDTO>,您的所有DTO对象都会从该变量延伸。

那有道理吗?