Исходный код вики ManagetLinkCollection
Версия 2.1 от Alexandr Fokin на 2020/06/14 12:08
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | Репозиторий: [[git repo>>https://git.denhome.ru/Repository/Detail/51601bfd-6f2c-40d8-88bb-f2724b294431]] |
| |
2.1 | 2 | |
| 3 | Данный проект реализует 2 коллекции. | ||
| 4 | Коллекцию представляют из себя Key Value хранилище, являются потокобезопасными. (В основе лежит ConcurrentDictionary) | ||
| 5 | |||
| 6 | **1) LinkStorage** | ||
| 7 | Интерфейс: | ||
| 8 | |||
| 9 | AddLink | ||
| 10 | TKey key - ключ | ||
| 11 | Func<TKey, TData> addFactory - фабрика для нового значения | ||
| 12 | Func<ILinkItem<TKey, TData>, TData> updateFactory - фабрика для обновления существующего значения | ||
| 13 | |||
| 14 | Если по ключу нет записи, то | ||
| 15 | добавить запись | ||
| 16 | счетчик записи = 1 | ||
| 17 | вызвать addFactory(если не null) и заполнить value.Data | ||
| 18 | Иначе если по ключу есть запись, то | ||
| 19 | Увеличить счетчик на 1 | ||
| 20 | вызвать updateFactory(если не null) и обновить value.Data | ||
| 21 | |||
| 22 | |||
| 23 | RemoveLink | ||
| 24 | TKey key - ключ | ||
| 25 | Func<ILinkItem<TKey, TData>, TData> updateFactory - фабрика для обновления существующего значения | ||
| 26 | |||
| 27 | Уменьшить счетчик на 1 | ||
| 28 | вызвать updateFactory(если не null) и обновить value.Data | ||
| 29 | Если значение счетчика <= 0 | ||
| 30 | То удалить запись | ||
| 31 | |||
| 32 | |||
| 33 | **2) ObjectLinkStorage** | ||
| 34 | Данная коллекция оборачивает LinkStorage, добавляя к контракту сущность объекта, ссылающегося на запись. | ||
| 35 | Все объекты, ссылающиеся на запись храняться в ImmutableHashSet. | ||
| 36 | |||
| 37 | При AddLink, помимо увеличения счетчика в HashSet записи добавляется ссылающийся объект. | ||
| 38 | При RemoveLink, помимо уменьшения счетчика из HashSet удаляется ссылающийся объект. | ||
| 39 | |||
| 40 | Ссылки: | ||
| 41 | https://wiki.denhome.ru/bin/view/Разработка/NET/C%23/ConcurrentDictionary/ | ||
| 42 | |||
| 43 |