Read-only vs View only
![]()
The other day, I was asked to provide the copy for a status that has a locked section on a screen.
The original text the designer added was “Read only”
And we got chatting…
My initial thought was to use the same with a hyphen, “read-only”. After a lot of deliberation, we went ahead with “View only” with an icon next to the word.
readonly¶
Система типов TypeScript позволяет помечать отдельные элементы интерфейса доступными только для чтения . Это позволяет вам работать в функциональном стиле (в котором неожиданные мутации это плохо):
Вы также можете использовать readonly в определениях interface и type , например:
Вы даже можете объявить свойство класса как readonly . Вы можете инициализировать их в момент объявления или в конструкторе, как показано ниже:
Тип Readonly¶
Существует тип Readonly , который принимает тип T и помечает все его элементы как readonly . Вот демонстрация использования этого на практике:
Различные варианты использования¶
ReactJS¶
ReactJS — это библиотека, которая любит иммутабельность, вы можете пометить ваши Props и State как неизменяемые, например:
Однако вам не нужно это делать, поскольку определения типов для React уже помечают их как readonly (внутренняя оболочка универсального типа соответствует типу Readonly , упомянутому выше). Поэтому, достаточно:
Обратно-совместимая иммутабельность¶
Вы даже можете пометить сигнатуры индекса только для чтения:
Это замечательно, если вы хотите использовать нативные массивы JavaScript в иммутабельном виде. На самом деле TypeScript поставляется с интерфейсом ReadonlyArray<T> , позволяющим вам сделать именно это:
Автоматический логический вывод¶
В некоторых случаях компилятор может автоматически делать предположение, что определенный элемент доступен только для чтения, например, внутри класса, если у вас есть свойство, у которого есть только геттер, но нет сеттера, оно предполагается только для чтения, например:
Что такое файлы «только для чтения» и для чего они используются?
Ответ: Файлы «только для чтения» («read-only») могут быть открыты, но не могут быть отредактированы. Они обычно используются в качестве шаблонов для создания новых файлов. Так как файлы «только для чтения» не могут быть изменены, они часто выступают в качестве модели или основы для создания нескольких похожих файлов. И Windows и Mac OS X поддерживают файлы «только для чтения».
ОС Windows
Чтобы сделать файл «только для чтения» («read-only») в Windows, сперва нужно щелкнуть правой кнопкой мыши по файлу, а затем выбрать пункт «Свойства» («Properties»). Затем в нижней части окна Свойства в разделе «Атрибуты» («Attributes») следует просто установить флажок «Только для чтения» (как показано ниже) и нажать кнопку Применить («Apply»).

Как только свойство файла установлено как «только для чтения», его нельзя перезаписать. Хотя, открыв файл, можно сохранить его с другим именем файла. Открытие файла только для чтения похоже на использование функции «Открыть как копию» («Open as a copy»), которую предлагают некоторые программы. Однако, в отличие от открытия файла с признаком «только для чтения», функция «Открыть как копию» создает копию файла при его открытии, а не при его сохранении.
Примечание: Если попытаться отредактировать и сохранить файл с атрибутом «только для чтения», то появится ошибка при сохранении «Не удается создать файл (путь к файлу). Проверьте правильность пути и имени файла.»
Mac OS X
Пользователи ОС Mac также могут создавать документы «только для чтения». Чтобы сделать файл «только для чтения» в Mac OS X, нужно щелкнуть правой кнопкой мыши (или Control-клик) по файлу и затем выбрать пункт меню «Получение информации» («Get Info»). В верхней части Информационного окна имеется флажок «Блокнот» («Stationery Pad») (см. ниже). Установка этого флажка, преобразует файл в шаблон «только для чтения». Всякий раз, когда открывается файл с установленным флажком «Блокнот», создается копия файла.
Опции «Блокнот» в Mac OS X служат полезным средством создания нескольких похожих документов на основе одного стандартного документа. Тем не менее, «блокноты» могут быть перезаписаны, если файл с таким же именем сохраняется на документ-«блокнот». Таким образом, рекомендуется для хранения документов-«блокнотов» использовать отдельный каталог, в котором не хранить редактируемые документы.
В Mac OS X для предотвращения от случайного удаления важных документы или заменены их новыми документами, пользователи могут выбрать флажок «Заблокированные» («Locked») в Информационном окно файла (см. выше).
Режим «Только чтение» в Web-приложениях
Объект, открытый в режиме Только чтение ( Read-only ) не может быть изменен пользователем, данные, хранящиеся в объекте, будут доступны только для чтения.
Режим ReadOnly может понадобиться в разных ситуациях, к примеру:
- Один пользователь открыл объект на редактирование, в это время другой пользователь пытается также открыть этот же объект на редактирование.
- У пользователя нет прав изменять какое-либо поле объекта, или сам объект, но есть право просматривать данные.
Составляющие режима ReadOnly
Режим можно условно поделить на 3 составляющие:
- Блокировка интерфейса пользователя
- Блокировка объекта данных в памяти приложения
- Блокировка объекта данных в базе данных
Блокировка интерфейса пользователя
Если пользователь не может вносить изменения в объект, он должен это осознавать в момент открытия формы редактирования. Если объект в данный момент недоступен из-за блокировки другим пользователем, рекомендуется вывести предупреждение типа Объект заблокирован другим пользователем. Вы желаете открыть объект только на чтение? Да\Нет .
Если пользователь все же желает открыть объект в режиме ReadOnly , необходимо заблокировать контролы для редактирования полей объекта. Также необходимо скрыть кнопки Сохранить и Сохранить и закрыть (только для случая полной блокировки, а не блокировки отдельных полей объекта).
Для блокировки интерфейса пользователя в Web-приложениях используется класс WebBinder.
WebBinder позволяет либо заблокировать объект полностью, либо заблокировать только некоторые его поля.
Важно: Стоит отметить, что WebBinder блокирует только те поля объекта, которые зарегистрированы в WebBinder’e и содержатся в передаваемом представлении, а также только серверные контролы, которые имеют свойства ReadOnly или Enabled .
- Полная блокировка объекта через WebBinder осуществляется вызовом метода
где wb это экземпляр WebBinder’a на конкретной странице.
- Еще один вариант полной блокировки: установка свойства ReadOnly у конкретной формы
- Частичная блокировка объекта (блокировка отдельных полей) осуществляется вызовом метода
где ФИО это наименование свойства, которое нужно заблокировать для редактирования.
- Еще один вариант частичной блокировки — блокировка конкретного контрола путем вызова метода
где ctrlФИО — контрол, который необходимо заблокировать для редактирования.
Блокировка объекта данных при открытии страницы редактирования
Чтобы заблокировать объект при открытии страницы достаточно послать в GET-запросе параметр &mode=readonly .
Блокировка объекта данных в памяти приложения
Блокировка объекта в памяти осуществляется вызовом метода объекта DataObject.LockObject(Key) , где Key — некий ключ блокировки типа Guid . Разблокировать объект можно только этим ключом при помощи метода DataObject.UnLockObject(Key) .
При вызове метода LockObject блокировка в базу не отправляется.
Блокировка объекта данных в базе данных
Для блокировки используется поддерживаемый технологией Сервис блокировок.
Блокировка объекта в базе данных железно защищает объект от изменений объекта другими пользователями. Создается запись в таблице STORMNETLOCKDATA и, пока она там существует, изменить объект может только пользователь, заблокировавший объект.