Notes |
|
(0018709)
|
zed
|
23-05-2019 20:03
|
|
И ещё мне кажется очень странным использование 3-х состояний TAccesState. Какой вообще смысл в использовании asUnknown?
По-моему, тут надо упростить, перейти на Boolean и по дефолту разрешать доступ ко всему, а уже ForceAbilities будут решать, что конкретно оставить.
Так же есть сомнение о необходимости свойств WriteAccess и IsReadOnly (у ITileStorageAbilities) - это вспомогательные свойства, которые могут быть получены из имеющихся. Их наличие усложняет код и по хорошему их надо либо убрать, либо заменить на одно свойство типа enum (возможно, даже только для чтения), со значениями (ReadOnly, WriteOnly, ReadWrite). |
|
|
|
Б.я. Пол часа писал, а оно ничго не сохранило, ибо долго писал. |
|
|
(0018711)
|
vdemidov
|
24-05-2019 04:59
(edited on: 24-05-2019 05:35) |
|
Пишу еще раз
> При создании хранилища с единственной целью - сканирование тайлов, получаем невалидный стейт, у которого нету доступа ни к чему.
А к чему там должен быть доступ. Вроде бы там и должен быть доступ только к скану. Но может быть и ошибка где-то.
Подразумевается, что это открытие только на один или несколько проходов сканирования всех тайлов, без возможности получения доступа к произвольному тайлу и без любых прав на изменение. Пример - проход по tar архиву.
>И ещё мне кажется очень странным использование 3-х состояний TAccesState. Какой вообще смысл в использовании asUnknown?
Смысл в том, что бы если запущена закачка, а доступа на запись в тайлохранилище нет, то что бы она могла понять, что запись не доступна и не качала тайлы без записи. И что бы инициализация была ленивая, тоесть оно не пытается узнать есть ли возможность записи пока не получит первую команду на запись. Но возможно, это действительно стоит выбросить и сделать только ленивую инициализацию всего тайлохранилища, а уже в ней сразу проверять и чтение, и запись.
>Так же есть сомнение о необходимости свойств WriteAccess и IsReadOnly (у ITileStorageAbilities)
Возможно. Скорее всего перемудрил. Поясню зачем это нужно. В первую очередь это нужно для типа тайлохранилища, что бы можно было указать какие типы операций оно поволяет. Причем все они практически ортогональны. И где ты наше WriteAccess у ITileStorageAbilities? Там есть:
AllowScan - проход по всем тайлам в тайлохранилище (например импорт tar архива)
AllowRead - произвольный доступ к тайлу - не обязательно подразумевает наличие AllowScan, так как это может быть какая-то база с АПИ позволяющим только одиночные запросы к тайлам
AllowAdd - возможность добавлять тайлы - может быть без любых других возможностей, например запись в tar - исключительно потоковый экспорт.
AllowDelete - возможность удялить тайлы - можно представить тайлохранилище даже просто в файловой системе, где есть право добавлять файлы, но нет права удалять. ХЗ надо ли оно такое.
AllowReplace - можно ли заменять тайлы. Кажется что можно заменить парой Add и Delete, но это только если обе возможности есть. Могу представить как случаи когда можно удалять и заменять существующие тайлы, но нельзя добавлять новые, так и случаи, когда можно добавлять новые и заменять существующие, но нельзя удалять (хотья, конечно это сомнительно)
IsReadOnly - добавлена, что бы можно было в параметрах тайлохранилища одной настройкой полностью отключить возможность изменения, но, думаю, можно было бы оставить ее чисто виртуальной на время чтения/записи настроек, а в рантайме хранить как отключение всех возможностей изменения.
|
|
|
(0018713)
|
zed
|
24-05-2019 06:33
|
|
Должен быть доступ к скану, но по факту его нету. И нет даже свойства ScanAccess, вместо которого от безысходности проверяется ReadAccess.
WriteAccess я в стейте нашёл. Просто оно такой же придаток, как и IsReadOnly. |
|
|
|
> Должен быть доступ к скану, но по факту его нету. И нет даже свойства ScanAccess, вместо которого от безысходности проверяется ReadAccess.
Значит нужно допиливать что-то. Когда это хозяйство писалось, тайлохранилищ только со сканом еще не было. Ты их вроде только недавно добавил. Вот и не учел я что-то.
> WriteAccess я в стейте нашёл. Просто оно такой же придаток, как и IsReadOnly.
Возможно в стейте стоит действительно сделать энам с несколькими состояниями. Смотри сам. Свои соображения я изложил. По хорошему, было бы неплохо в возможности тайлохранилища еще поддержку tne указывать, что бы можно было включать/отключать не на всю программу, а и для конкретной карты. И при операциях перемещения-копирования это учитывать и явно настраивать. |
|
|
(0018715)
|
zed
|
24-05-2019 18:59
|
|
А самое интересное, что этот WriteAccess повсеместно ошибочно используется там, где надо проверять AddAccess. Видимо, название оказалось неудачным.
Займусь, наверное, небольшим рефакторингом этого класса на следующей неделе. |
|