Как правильно обрабатывать ссылки на файлы в приложении? - PullRequest
1 голос
/ 17 сентября 2009

Мне всегда было интересно, как обращаться с файлами в приложениях. Скажем, у нас есть Объект, содержащий несколько данных о Файле, например UUID, и ссылку на файл на диске.

Даже если этот Объект является неизменным, могут возникнуть побочные эффекты, например, файл будет удален частью приложения, но другая не знает об этом, что сделает Объект непригодным для использования.

Есть ли удобный шаблон, который я могу использовать для таких случаев? Или мне нужно перепроверять каждый раз, когда я использую объект, который ссылка на файл на самом деле указывает на существующий файл? Это может быть единственным решением, поскольку файл может быть удален из-за пределов приложения, но может оставить приложение в сложной для обработки ситуации.

Проблема существует наоборот: кто отвечает за удаление файла? Поскольку объект может быть обычным объектом значения, на него могут ссылаться другие части системы, ни одна часть кода не может удалить файл для очистки ресурсов, чтобы избежать побочных эффектов ...

Но может существовать шаблон или политика, которые можно использовать для облегчения обработки в таких случаях.

Ответы [ 4 ]

1 голос
/ 17 сентября 2009

Похоже, вам нужно разобраться с двумя случаями:

1). Ресурс, который вы используете, может быть удален, устарел и недоступен. Это в значительной степени относится к любым внешним ресурсам, например базам данных, удаленным серверам и файлам. Очевидно, что вам нужна обработка исключений, и вы уже рассмотрели это ... однако есть кое-что еще, см. Следующий случай ...

2). Несколько частей вашего приложения хотят использовать один и тот же ресурс, и мы хотим обеспечить их использование, чтобы они не мешали друг другу.

Для этого есть две возможности: сам ресурс имеет своего рода посредничество (например, блокировки файлов), и вы этим пользуетесь. В качестве альтернативы вам нужно контролировать это, и именно здесь (как сказал Жан-Лу) играет прокси. Теперь мы, вероятно, не можем навязать использование прокси-сервера, если кто-то напишет код для обхода прокси-сервера и перейдет непосредственно к файлу, ну, у нас нет защиты - и это все равно, что какая-то внешняя сила, наносящая ущерб вашему ресурс. Предполагая, что у нас есть сотрудничество, мы можем добавить в прокси много хитрости:

а). Посчитайте пользователей, следовательно, удаление полиции б). Подсчитайте пользователя и автоматически удалите, когда последний уйдет. с). Объединяйте прокси-серверы, если создавать их дорого. г). Если мы получим исключение, удалите или отметьте все устаревшие прокси е). Заметьте, что два разных имени файла относятся к одному и тому же файлу и полиции, которые совместно.

0 голосов
/ 17 сентября 2009

1) В этом случае вы можете рассмотреть возможность использования прокси для дескриптора с некоторой информацией о состоянии.

2) Возможно, более уместно использовать обработку исключений.

0 голосов
/ 17 сентября 2009

Вы должны всегда проверять, существует ли файл, прежде чем что-либо делать с ним. Независимо от того, насколько хорошо ваше приложение, всегда найдется кто-то, кто может сделать что-то, чего вы не ожидаете, особенно когда речь идет о работе вне вашего приложения. Простая строка кода может быть различием между работающим приложением и отказавшим приложением.

Проверьте, существует ли файл, добавьте исключения. Лучший способ пойти.

0 голосов
/ 17 сентября 2009

Вот почему у многих языков есть исключения.

Если настоящий файл уровня ОС признан недействительным вне вашей программы, ваш File объект не будет работать и вызовет исключение.

Это стандартный подход: исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...