https://github.com/diev/folderdoc
Folders and Documents linkable in both directions.
https://github.com/diev/folderdoc
Last synced: about 2 months ago
JSON representation
Folders and Documents linkable in both directions.
- Host: GitHub
- URL: https://github.com/diev/folderdoc
- Owner: diev
- License: apache-2.0
- Created: 2016-12-08T11:25:11.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-04-28T13:16:41.000Z (over 9 years ago)
- Last Synced: 2025-02-22T09:45:52.266Z (over 1 year ago)
- Language: C#
- Homepage: http://diev.github.io/FolderDoc/
- Size: 32.2 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# [FolderDoc](http://diev.github.io/FolderDoc/)
[](https://ci.appveyor.com/project/diev/folderdoc)
[](https://github.com/diev/FolderDoc/releases/latest)
Folders and Documents linkable in both directions.
Папки и документы со ссылками в обе стороны.
## Сценарии использования
### Сценарий 1: Папка с файлами
Эмуляция обычной файловой папки с документами и подпапками с документами и в
них - типичная иерархическая структура. У каждого документа/подпапки `Item`
есть один `Parent` (нет его только у корневой папки) и сколько-то возможных
`Children`. Собственно, такую иерархию можно было организовать и одной *Self
Referencing* таблицей `Items`, но в такую модель данных заложена б*о*льшая
универсальность, как это показано в нижеследующих сценариях.
Именно по этому сценарию загружается начальный образец данных по древовидному
содержимому папки `MyDocuments` из профиля текущего пользователя.
### Сценарий 2: Тегированные папки с пересекающимися файлами
К ситуации сценария 1 добавляется возможность иметь более одного `Parent`,
что позволяет на один и тот же документ/подпапку `Item` попадать из разных
мест по навигационному свойству `Children` и также перемещаться **в обратные
стороны** по свойству `Parents`. Эту возможность дает таблица *Many-to-Many*
`Links` с коллекцией пар связанных ею ключей `ParentId` и `ChildId`.
Такой взаимосвязанный документ становится "общим" для нескольких папок - без
необходимости его дублировать в каждую из них (как при использовании
сценария 1) или создания линков средствами файловой системы. Более того,
приложения к документу теперь выглядят действительно как приложения
`Children` к `Item` - без необходимости создания дополнительных подпапок или
загромождения файловой системы рядом лежащими файлами без иерархической
структуры:
* документ - приложения/фотографии к нему;
* исходный текстовый документ - сканы страниц подписанного документа;
* документ - разные редакции для разных назначений.
Таким же образом можно организовать версионность документов - все в единой
системе иерархичности - без необходимости подпапок и разрастания дублей
одних файлов в одной куче с дублями других.
Также это позволяет создать систему, где каждый пользователь может хранить
свои собственные коллекции документов и папок в таблице `Folders` -
независимо от физической организации хранения файлов на диске или в базе.
Сами файлы при этом можно переименовать по GUID `Item.Id` - для единообразия
и большей сохранности - в том числе и в целях информационной безопасности,
ограничив к ним доступ как на извлечение отдельных документов, так и на
хищение всей папки с документами.
И главное - можно выполнить *полнотекстовый поиск* для получения определенного
документа, а от него уже найти все родительские папки/документы, с которыми он
взаимосвязан.
*Возможно, все это уже сделано в Microsoft SharePoint, но с каждой новой версией
он все монструознее и с все большими требованиями к ресурсам, в том числе
лицензионным, а это решение нацелено на собственные задачи и возможность
миграции в среду ASP.NET Core на серверах без Windows.*
### Сценарий 3: Каталог любых элементов
Предыдущий сценарий 2 расширяется до универсального хранилища вообще любых
элементов задаваемого класса `Item`, который может входить сразу в несколько
категорий `Parents` товаров, например, и при этом также иметь несколько
сопутствующих товаров `Children`.
Это можно еще представить как интернет-магазин запчастей, где они подходят
сразу к нескольким моделям (узлам) изделий и сами они, в свою очередь,
содержат более мелкие детали. Вся информация от этом управляется классом
`Link` (таблица `Links`), а описание каждого элемента определяется классом
`Item` (таблица `Items`). Сами каталоги деталей - класс `Folder` (таблица
`Folders`). В дополнение - каждый элемент может содержать ссылки на файлы
с инструкциями, лежащими на диске.
## Особенности реализации
Проект создан на C# с применением Entity Framework с подходом *Code First*
с использованием WinForms и NET Framework 4 для работы в Windows XP и выше.
## License
Licensed under the [Apache License, Version 2.0](LICENSE).