代码之家  ›  专栏  ›  技术社区  ›  KeithS

用作成员泛型类型限制的泛型类参数

  •  0
  • KeithS  · 技术社区  · 14 年前

    我正在开发的应用程序需要能够从几个不同的数据源中提取数据,包括几个SQL数据库。不是理想的,但它是一个应用程序,它集成了几个现有的应用程序,所以我必须和我的模式一起工作。

    无论如何,我使用的是存储库模型,并为每个数据源设置一个存储库,因此我只需要在任何给定点建立并保持所需的连接。因此,我必须根据保存特定域对象的存储库来拆分我的域模型,并且必须强制将这些对象传递给泛型 Save<T> Query<T> 方法的类型实际上可以使用。我试过了,你看,它汇编了:

    public interface IDomainObject{...}
    public interface IOneDomainObject:IDomainObject{...}
    public interface IAnotherDomainObject:IDomainObject{...}
    
    public interface IRepository<TRest> where TRest:IDomainObject
    {
       ...
       public void Save<T>(T objectToSave) where T:class,TRest //<-- sweet! Didn't think that would work!
       public IQueryable<T> Query<T>() where T:class,TRest
       ...
    }
    
    public interface ISecurityRepository:IRepository<IOneDomainObject>{}
    public interface IOtherRepository:IRepository<IAnotherDomainObject>{}
    

    所以我觉得自己很聪明,不过我敢肯定奥卡姆剃刀在这里的某个地方适用。这是一种气味,还是一种有效的方法来定义跨类的通用功能,这些类作用于不同的对象层次结构?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Andrew Hare    14 年前

    这样的代码正是泛型最初被添加到C的原因。适用于不同类型的通用算法。

        2
  •  0
  •   joshuapoehls    14 年前

    与RPM1984相呼应的是,我已经多次看到(并使用)这种方法,它的效果非常好。尤其是仓库。