Предполагая, что вы получаете данные из базы данных, первое, что приходит на ум, - это то, что вы будете использовать базу данных n + 1 раз для того количества родителей, которое у вас есть в базе данных.,Вы должны попытаться получить всю древовидную структуру одним ударом.
Во-вторых, вы, кажется, получаете шаблоны идей, видя, как вы используете шаблон репозитория, поэтому вы можете захотеть взглянуть на IoC.Это позволяет вам внедрить вашу зависимость от определенного объекта, такого как ваш репозиторий, в ваш класс, где он будет использоваться, что упрощает модульное тестирование.
В-третьих, независимо от того, откуда вы получаете данные, переместитеструктурирование данных в древовидную структуру данных в службу, которая возвращает вам объект, содержащий все ваши отделы, которые уже были организованы (в основном это DTO ).Это поможет вам уменьшить дублирование кода .
С чем угодно, чтобы применить принцип yagni .По сути, это говорит о том, что вы должны что-то делать только в том случае, если вам это нужно, поэтому, если код, который вы предоставили выше, завершен, не требует дополнительной работы и функционален, не трогайте его.То же самое касается проблемы с производительностью выбора n + 1, если вы не видите никаких падений производительности, ничего не делайте, поскольку это может быть преждевременная оптимизация .
В вашемedit
DepartmentRepository repo = new DepartmentRepository();
var entries = repo.FindAllDepartments();
var parentDepartments = entries.Where(d => d.IDParentDepartment == null).ToList();
foreach (var parent in parentDepartments)
{
TreeNode node = new TreeNode(parent.Name);
treeView1.Nodes.Add(node);
var children = entries.Where(x => x.IDParentDepartment == parent.ID).ToList();
foreach (var child in children)
{
node.Nodes.Add(child.Name);
}
}
У вас все еще есть проблема n + 1.Это связано с тем, что данные извлекаются из базы данных только при вызове ToList () или при выполнении итерации по перечислению.Это было бы лучше.
var entries = repo.FindAllDepartments().ToList();
var parentDepartments = entries.Where(d => d.IDParentDepartment == null);
foreach (var parent in parentDepartments)
{
TreeNode node = new TreeNode(parent.Name);
treeView1.Nodes.Add(node);
var children = entries.Where(x => x.IDParentDepartment == parent.ID);
foreach (var child in children)
{
node.Nodes.Add(child.Name);
}
}