Вот моя точка зрения. Я строгий последователь шаблона Repository. Там должно быть 3 метода, которые принимают одну сущность. Добавить, Обновить, Удалить, определено в общем.
public interface IRepository<T>
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
Помимо этих методов, вы имеете дело с «запросом» или методом обслуживания. Если бы я был на вашем месте, я бы сделал хранилище в общем виде, как указано выше, добавив «QueryProvider», как показано ниже, и поместил вашу бизнес-логику , где он принадлежит , в «Службы» или в «Команды» / Запросы "(исходит из CQRS, Google it) .
public interface IQueryProvider<T>
{
TResult Query<TResult>(Func<IQueryable<T>, TResult> query);
}
(Надеюсь, мое мнение несколько полезно :))