Вы можете сделать это, используя data-
атрибуты , хотя ( часть спецификации HTML5 ), например:
jQuery даже построил -в поддержке их в 1.4.3+, например:
$("li").data("something") //"CommonLi"
Для других ваших вопросов:
Нет ничего плохого в циклических ссылках как таковых, и они широко используются в .NET Framework, например XmlNode.OwnerDocument, Control.Parent.
Если вам нужно пройти вверх по tree, тогда можно использовать обратную ссылку.
В COM циклические ссылки сложны, потому что, если вы установили контейнер и все его дочерние элементы на ничто, тогда объекты не будут очищены должным образом, так как дочерние элементы все еще содержат ссылки к родителю. Однако сборка мусора .NET не имеет проблем с этим способом реализации.
Нужно ли контейнеру знать о типе содержимого? В противном случае универсальные шаблоны могут этого избежать - например, Контейнер
, где вы случайно используете Контейнер
. Помимо этого; вставка необходимых деталей в интерфейс (или базовый класс) в сборке, на которую могут ссылаться оба, является распространенным подходом.
Лично я бы попытался просто избежать необходимости, чтобы ребенок знал о родителе.
Также; обратите внимание, что если вы выполните , спуститесь по маршруту абстракции (интерфейса и т. д.); это может иметь большое значение, если вы используете (например) сериализацию xml.
(отредактируйте комментарии)
OK; first: what problem is the circular reference (within an assembly) causing; if none, leave it alone. If there is a problem, then you'll need an extra type; presumably some interfaces to represent the concrete types - i.e. where Entity : IEntity
, and EntityContainer
only knows about IEntity
(or vv with IEntityContainer
, or both),
Итак, я не вижу проблем с вашей моделью класса, но вы можете легко сделать чистый разрез. Заставьте Entity реализовать интерфейс IEntity и сделать так, чтобы EntityContainer содержал IList, и если у вас нет очень конкретной причины для использования IList, вы должны учитывать IEnumerable, это упростит для потребителя EntityClass, который вы используете. Поскольку передача любого массива IEntity или выражения linq возможна при выборе IEntities
В моей книге можно использовать объекты с круговыми ссылками, если вы используете какой-то шаблон отложенной загрузки при проектировании этих объектов.
например.
Вы хотите получить доступ: Company.Employee И в другом сценарии: Employee.Company
Что делает циклическую ссылку, например Company.Employee.Company.Employee и т.п.
Если эти свойства не загружаются лениво, например Объект Company всегда загружает свое свойство Employee, а объект Employee всегда загружает свое свойство Company, поэтому он не будет работать слишком хорошо, когда вы вводите источник данных.