Когда я начинал, у меня был интерфейс:
public interface IBlogReader
{
BlogPost GetLatest();
IEnumerable<BlogPost> FindByDate(DateTime from, int limit);
IEnumerable<BlogPost> FindByCategory(string category, int limit);
IEnumerable<BlogPost> FindByAuthor(string author, int limit);
}
Затем мне потребовались различные варианты запросов (FindByAuthorWithCategory, FindByDateWithAuthor и т. Д.), И я решил, что мне нужно изменить подход, так как это будет расти. Мне нужно больше и разные запросы. Затем у меня был интерфейс, такой как:
public struct FindCriteria
{
DateTime? from;
string category;
string author;
}
public interface IBlogReader
{
BlogPost GetLatest();
IEnumerable<BlogPost> Find(FindCriteria criteria);
}
Интерфейс был меньше, и я мог отказаться от многих методов. Тем не менее, я в основном переместил реализацию многих методов в реализацию громоздкого одиночного метода. На какое-то время мне стало лучше. Я думал о переходе к подходу, который обернул бы метод громкого запроса в ряд отдельных объектов, где каждый объект обрабатывал специфику, и я призываю к результатам:
public abstract class QueryCommand
{
protected IBlogReader reader = null;
public QueryCommand(IBlogReader reader)
{
this.reader = reader;
}
public abstract void Execute();
}
public class GetLatest : QueryCommand
{
public BlogPost GetResults();
public void Execute();
}
public class FindByDate : QueryCommand
{
public IEnumerable<BlogPost> GetResults();
public void Execute();
}
Это все еще не правильно. Я читал о шаблоне репозитория и не понимаю, как он применяется. Мне казалось, что я все равно получу множество методов в конце. Данные хранятся в облаке. Использование шаблона спецификаций было бы слишком тяжелым, так как мое прочтение приведёт все записи к квалификации. В другой попытке я создал отдельные объекты DAO и обернул их внутри фасадного объекта, похожего на репозиторий. Конечный результат был таким же, как я начал со ... многими методами ... но репозиторий не выполнил всю работу.
Должен ли я просто позволить себе иметь много методов или множество объектов и справиться с этим?