我正在开发的应用程序需要能够从几个不同的数据源中提取,包括几个SQL数据库。不太理想,但它是一个应用程序,旨在将几个现有的应用程序集成在一个屋檐下,所以我必须使用我的架构。
无论如何,我正在使用Repository模型,并为每个数据源设置一个存储库,所以我只需要在任何给定点上建立并保持我需要的连接。所以,我必须根据保存特定域对象的存储库拆分我的域模型,并且我必须强制执行传递给通用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>{}
所以我感觉很聪明,但是我确信奥卡姆的剃刀适用于某处。这有什么味道,或者它是一种有效的方法来定义跨不同对象层次结构的类的通用功能吗?
答案 0 :(得分:0)
回应RPM1984,我已经多次看到(和使用过)这种方法很有效。特别是对于存储库。
答案 1 :(得分:0)
这样的代码就是将泛型添加到C#的原因。常用算法适用于不同类型。