Wolę ten rodzaj struktury. Utrzymując pojedynczą listę (możesz użyć słownika lub podobnego do szybkości) elementów i przekazując ją do funkcji GetChildItems, masz większą elastyczność i łatwość sortowania, dodawania, usuwania, zapisywania do bazy danych itp.
Naprawdę potrzebujesz tylko funkcji GetChildItem, gdy renderujesz listę do widoku i chcesz, aby struktura drzewa była łatwa do edycji, jak mówisz. W tym przypadku można mieć widok modelu z pełną listą i element, który jest przekazywany do każdego widoku poz
public class Item
{
public string Id { get; set; }
public string ParentId { get; set; }
public IEnumerable<Item> GetChildItems(List<Item> allItems)
{
return allItems.Where(i => i.Id == this.ParentId);
}
}
public class Tree
{
public List<Item> Items { get; set; }
public IEnumerable<Item> RootItems(List<Item> allItems)
{
return allItems.Where(i => i.ParentId == null);
}
}
Uwaga: struktura klasy powyżej jest przeznaczony do naśladowania tradycyjny kompleks obiektów wzór. w dzisiejszych czasach miałbyś prawdopodobnie tylko GetChildItems (List allItems, Item parentItem) w widoku modelu
Czy rodzice przychodzą przed dziećmi na liście? –
Chciałbym w to zaglądać. Tak naprawdę nie pracowałem na drzewach. –