Я реализую дерево, думаю о нем как о структуре папок, поэтому у меня есть класс, который выглядит следующим образом:
public class Folder
{
//Various Props like Name etc.
public IList<Folder> Children{get;}
public Folder Parent {get;}
}
Теперь я хочу идти вверх и вниз по дереву, чтобы по корню я мог найти лист, а по листу я мог найти корневой узел. Поэтому каждому ребенку нужен родитель. Теперь вопрос в том, как лучше всего добавить новый узел в дерево. Я использовал два решения в прошлом:
- Добавить метод AddChild (Folder) в папку, который обрабатывает добавление папки и может установить родительский элемент. Проблема в том, что теперь мне нужно заблокировать мою коллекцию Children, чтобы вы не могли обойти этот метод.
- Создайте мою собственную коллекцию Children, которой будет возвращена ссылка на экземпляр, чтобы он мог обрабатывать установку родительского элемента в надстройке. Проблема с этим, я должен реализовать новую коллекцию.
- Использовать коллекцию, в которой есть события, когда элементы добавляются или удаляются.
Мне любопытно, какие шаблоны обычно используют люди, а затем, если у кого-нибудь есть какие-либо предложения для моего конкретного варианта использования. Я использую nHibernate, чтобы сохранить дерево на сервере SQL. Я бы предпочел не реализовывать пользовательскую коллекцию, так как это большой код, чтобы заставить это работать для чего-то, что является очень маленькой частью моего приложения.