Я создал сервис, который должен получать элементы из базы данных. В течение жизненного цикла разработки сервис рос, и сейчас у меня есть много методов, которые получают элементы для идентификатора, категории, имени и т. Д.
На данный момент я пытался не возвращать IEnumerable, но Iqueryable и создавать выражение Where в методах, которые вызывают службу, но я не думаю, что это правильный способ сделать это. Конечно, если где-то предложение Where дублируется, я пытаюсь переместить дублированный код в сервис и использовать Iqueryable, созданный ранее.
OLD:
public async Task<IEnumerable<Element>> GetElementsByIds(List<int> elementsIds)
{
var elements = await _context.Elements
.Include(e => e.ElementCategories)
.Include(e=>e.ElementSth)
.Where(e => elementsIds.Contains(e.Id))
.ToListAsync();
if (!elements.Any())
{
throw new NotFoundException(nameof(Element), elementsIds);
}
return elements;
}
public async Task<IEnumerable<Element>> GetElementsPerCategory(string categoryName)
{
var elements = await _context.Elements
.Include(e => e.ElementCategories)
.Include(e=>e.ElementSth)
.Where(c=>c.Category.Name == categoryName)
.ToListAsync();
if (!elements.Any())
{
throw new NotFoundException(nameof(Element), elementsIds);
}
return elements;
}
ТЕПЕРЬ:
public async Task<IQueryable<Element>> GetElementsByIds(List<int> elementsIds)
{
var elements = _context.Elements
.Include(e => e.ElementCategories)
.Include(e=>e.ElementSth);
return elements;
}
Я хочу реорганизовать сервис и создать будущие сервисы лучше. Есть ли у вас опыт с проблемой?