Приложение, которое я разрабатываю, должно быть в состоянии извлечь из нескольких различных источников данных, включая пару баз данных 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>{}
Так что я чувствую себя умным, однако я уверен, что бритва Оккама применима здесь где-то.Это пахнет, или это правильный способ определения общей функциональности между классами, которые воздействуют на расходящиеся иерархии объектов?