CA>Доброго вам времени суток,
Доброго
CA>Присутствие объектов в той или иной коллекции фактически должно зависеть от свойств данного объекта. Таким образом, когда происходит изменение свойств мне нужно удалить или добавить этот объект в коллекцию.
Есть много факторов которые влияют на конечное решение:
Как часто меняются объекты в коллекциях?
Как часто происходит доступ к этим объектам?
Сколько этих коллекций (с уникальным критерием отбора)?
Как много объектов в коллекциях?
Может ли объект принадлежать нескольким коллекциям одновременно?
Это коллекции в памяти или в БД или на другом компе в сети?
Конечное решение может как подходить так и не подходить в зависимости от ответа на вопросы.
Например:
если "чтений" из коллекции меньше или не сильно больше чем изменений объектов, то перебрасывать объекты между коллекциями будет ресурсоемко.
если же чтений много больше, чем изменений, то перебрасывать объекты -- отличный вариант (если, конечно, коллекций не сотни тысяч).
если коллекций много и объект может принадлежать сразу многим из них, то ручной переброс может превратиться в ресурсоемкую задачу даже при небольшом кол-ве изменений.
и т.д.
В любом случае, если планируется менять логику и/или коллекций много и/или много разных типов объектов, то писать логику "перебрасывания" в set-ерах нежелательно -- будет сложно поддерживать.
Я бы, лично,
рассмотрел такой вариант:
Одна
физическая коллекция храняцая ВСЕ объекты. Конкретные коллекции получаются из общей с помощью linq-фильтра (виртуальные коллекции). Релализация варианта на твой выбор. Это могут быть как методы/свойства get_ObjectsOfKindQ() у самой коллекции, так и отдельные объекты-коллекции, которые фильруют объекты из общей коллекции при обращении.
Если чтений прилично больше чем записей и окажется, что фильтрация съедает все время, то можно рассмотреть вариант
Хвост и
Re: Управление присутствием в коллекцияхАвтор: igor-booch
Дата: 19.04.12
с DependencyProperty выше по ветке: подписаться на события изменения из общей коллекции и из внутреннего кэша и принимать решение о добавлении / удалении объекта из внутреннего кэша.
А еще бы я подумал вот о чем:
Зачем городить велосипед если описанная тобою функциональность уже отлично реализована в Базах Данных.
Недостаточно скорости доступа? Можно взять in-memory базу (например SQLite).
Не хочешь сериализовать объекты в представление БД? Используй объектные in-memory базы (тут я не подскажу).
И вот еще о чем бы я подумал:
Предложенный тобой вариант привлекает простотой реализации. Но содержит много недостатков. Основной из которых -- плохая поддерживаемость решения и неочевидность связей между сетером объекта и помещением его в коллекцию. Если для тебя недостатки этого подхода совсем не недостатки, то я бы выбрал именно его.
СУВ,
Aikin... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>