Я собираюсь показать свою неопытность здесь, но эй - как любой разработчик, которого я хочу изучать.
Имеется следующий интерфейс:
public interface IRepository
{
entityDB Database { get; set; }
IQueryable<T> All<T>() where T:class, new();
T Single<T>(Expression<Func<T, bool>> expression) where T : class, new();
IList<T> Find<T>(Expression<Func<T, bool>> expression) where T : class, new();
}
Как бы я мог создать пригодный для использования класс репозитория, чтобы я мог заменить универсальный тип T на сильный тип?
Предполагая, что у меня есть сайт с портфолио фотографий, который имеет сущность Photos и сущность CameraSettings, как мне определить типы - и, следовательно, L2S - которые будут включены в мой конкретный класс? В настоящее время, когда я реализую класс, он ожидает следующую форму:
public class PhotoRepository : IRepository
{
public override IQueryable<T> All<T>()
{
// code goes here...
}
public override T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression)
{
// ...and here...
}
public override IList<T> Find<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression)
{
// ... and let's not forget here.
}
}
Правильно ли я все делаю, или я должен использовать интерфейс, который выглядит следующим образом:
public interface IRepository<T> where T:class
{
entityDB Database { get; set; }
IQueryable<T> All();
T Single<T>;
IList<T> Find();
}
Я просто хочу, чтобы мои модульные тесты работали правильно и были уверены, что я не учусь дурным (или просто безобразным) привычкам. Оцените управляемость в правильном направлении.