Шаблон вложенной иерархии объектов

#c# #design-patterns

#c# #шаблоны проектирования

Вопрос:

У меня есть объект, у которого могут быть родители и дочерние элементы одного и того же типа объекта. Существует ли стандартизированный способ реализации этого шаблона?

Что-то вроде:

 public class Nested
{
   public string Name {get; set;}

   public List<Nested> Parents {get {TODO}}
   public List<Nested> Children {get {TODO}}
}
  

Комментарии:

1. Проверьте, помогает ли эта ссылка forums.silverlight.net/forums/p/231184/566463.aspx . Обсуждение аналогичной проблемы, связанной с базой данных dbforums.com/microsoft-sql-server /… и forums.asp.net/t/1259184.aspx/1

Ответ №1:

Взгляните на составной шаблон здесь

Ответ №2:

С точки зрения памяти, похоже, что любому экземпляру вашего класса потребуется рекурсивно отфильтровать все, чтобы выяснить, каковы взаимосвязи. Это обременительно.

Я бы рекомендовал просто присвоить вашему классу свойство, подобное этому (или что-то более сложное, в зависимости от того, чего вы хотите достичь):

 public Nested parent;
  

Это превратило бы его в связанный список. Вы можете отдельно создать метод вне класса, который управляет поиском родителей на основе ограниченного набора параметров (например, FindParentsOfNestedToCertainGeneration(int numOfGenerations, вложенный дочерний элемент) — Это просто перейдет к дочернему элементу и поднимется по цепочке родителей в свойстве «parent»).

Комментарии:

1. Карл Бенсон, я думаю, что требование заключается в том, чтобы у одного узла могло быть несколько родительских элементов. Например, организация, в которой у сотрудника может быть более одного руководителя.