У меня есть два набора данных в двух разных моделях, реализующих интерфейс репозитория. Один из них находится в плоском списке, который отлично подходит для модели репозитория. Другая модель данных отформатирована в древовидной структуре, а реализация интерфейса репозитория, который я построил, выглядит очень теневой. Я мог бы попытаться сгладить вторую модель данных и просто использовать ссылки на родителей, но в настоящее время приложение имеет некоторые большие преимущества от возможности получить данные в виде древовидной структуры.
Что я хотел бы знать, есть ли у кого-нибудь опыт внедрения шаблона репозитория с помощью модели данных с использованием дерева. В настоящее время в моем методе Get(Func<T, bool> predicate)
я выравниваю список с помощью рекурсивного метода и возвращаю объект с запросом LINQ, но я чувствую, что эта реализация немного дорогостоящая.
Любые советы о том, как реализовать это, будут оценены.
Здесь реализуется метод get по предикату, если это помогает проиллюстрировать силлины реализации.
protected virtual IEnumerable<T> Get(Func<T, bool> predicate)
{
var objects = GetAll<T>();
return objects.Where(predicate);
}
EDIT: еще один код
private IEnumerable<TreeData> GetRecursiveObjects(TreeData object)
{
var allChildren = new List<TreeData>();
allChildren.AddRange(object.Children);
foreach (var child in object.Children)
{
allChildren.AddRange(GetRecursiveObjects(child).ToArray());
}
return allChildren;
}
protected virtual IEnumerable<T> GetAll<T>()
{
var objects = new List<T>();
objects.AddRange(Objects);
foreach (var object in Objects)
{
objects.AddRange(GetRecursiveObjects(object));
}
return objects.OfType<T>();
}
Второе редактирование:
Я также немного смущен тем, что хорошая стратегия для добавления элементов в репозиторий будет. Должен ли я обрабатывать добавление к дочерним элементам родительского элемента в используемом коде или должен ли репозиторий взять оба элемента и ссылаться на него родительским и обрабатывать всю операцию добавления?
ТЛ; дг
Не сумасшествие пытается реализовать интерфейс репозитория с данными в древовидной структуре?