Изменения в архитектуре сервера системы тестирования в версии 1.3.1
Базовый класс для страниц
Для того, чтобы предотвратить дублирование кода, который выполняется на каждой странице (в том числе: проверка авторизации, вывод хедера/футера страницы, проверка прав доступа) предлагается создать базовый класс Страница (
Common Page?), в котором будут реализованы повторяющиеся операции. При создании конкретной страницы будет необходимо отнаследоваться от класса CommonPage и перегрузить необходимые методы.
Список методов, которые будут доступны:
- process – исполняет код логику страницы, т.е. вызывает перегруженные методы в заданном порядке, выполняя необходимую предварительную инициализацию. (Метод не требует перегрузки!)
- process_request – обработка запроса. В данном методе разработчику страницы необходимо выполнить обработку входящих get-, post-параметров, файлов загружаемых в систему. Ссылки на эти параметры будут доступны через параметры функции.
- prepare_content – подготовка данных для отображения. Возможно, чтение данных из БД в память для дальнейшего использования.
- show_content – отображение контента. В дальнейшем возможно использование шаблонов (например, Template Toolkit) для формирования html-кода страницы.
- db – возвращает экземпляр класса Nsuts_new::Common::Db
- ui (user info) – возвращает экземпляр Nsuts_new::Object::UserInfo (deprecated, рекомендуется использовать user).
- user – возвращает экземпляр класса Nsuts::Schema::Users. Используется для доступа к данным текущего пользователя с использованием ORM.
Обработка ошибок через исключения
Предложенная схема позволяет реализовать единообразную обработку ошибок через исключения. Обработка ошибок реализуется в базовом классе
CommonPage.
Для проверки прав доступа можно применить следующую схему: все функциональные операции реализуются в отдельном слое (можно реализовать как в процедурном, так и в объектно-ориентированном стиле), при этом внутри реализации осуществляется проверка прав пользователя (в настоящее время реализовано в модуле
Permission ). В случае возникновения ошибки выбрасывается исключение, которое обрабатывается в коде CommonPage.
Хранение документов на файловой системе (in process)
Проблема: число подпапок в папке ограничено, увеличение числа файлов делает медленным поиск
Изменение:
Объект | NSUTSv1.2.8 | NSUTSv1.3.* |
Решение | solution/<filename>; solution/<filename>.md5 | solution/<taskid>/<filename> |
Детализированный отчет (ошибка компиляции и тд) | solution/<solution_id>.zip | solution/<taskid>/<solution_id>.zip |
Текст на печать | solution/<filename>.txt | print/<filename>.txt |
Возможно в будущем надо ввести более детализированную иерархию папок: олимпиада/ тур/ решение