У меня есть ряд объектов, с каждым из которых связаны метаданные. В типичном случае у меня есть класс, представляющий Object и Meta_Data, и я могу сделать Meta_Data атрибутом Object.
+---------------+ +---------------+
| Object |--->| Meta_Data |
+---------------+ +---------------+
Проблема возникает, когда я хочу создать коллекцию Объектов, каждый из которых связан с определенным экземпляром Meta_Data.
Метаданные должны иметь доступ к своим соседям:
a[0] = Object();
a[1] = Object();
// a[0].meta needs to be able to interact with a[1].meta
a[0].meta = Meta_Data();
a[1].meta = Meta_Data();
Если я просто создаю коллекцию объектов (с экземплярами Meta_Data в качестве атрибутов), то экземпляры Meta_Data изолируются и могут взаимодействовать только при прохождении через первичный объект. Это кажется не идеальным.
Единственная реальная альтернатива, о которой я могу подумать, - это создать некоторый контейнерный класс, который позволит мне иметь:
- Атрибут ObjectStack, который содержит коллекцию экземпляров Object
- Атрибут Meta_DataStack, содержащий коллекцию экземпляров Meta_Data
- Какой-то интерфейс, который синхронизирует два, так что я могу запросить соответствующие метаданные для любого конкретного экземпляра объекта.
Это снова кажется неэффективным. Итак, каков наилучший способ иметь коллекции объектов, которые можно связать поэлементно?