В основном я пишу приложение, которое копирует / перемещает файлы из локальной файловой системы в удаленную файловую систему по некоторому протоколу, подобному FTP.
Было бы хорошим подходом инкапсулировать биты, зависящие от протокола, внутри интерфейса поставщика услуг файловой системы?
Насколько я понимаю, это заставит мою библиотеку работать с другими приложениями, использующими новый IO API, верно?
2 ответа
Похоже, вы думаете о создании класса RemoteFileSystemProvider
специально для вашей удаленной файловой системы. Этот класс будет отражать FileSystemProvider
, предоставляя аналогичные функции для доступа к удаленной файловой системе, которую вы используете. Если это то, что может многократно использоваться в вашем проекте или команде, то при создании кода стоит отразить объект FileSystemProvider
. Это позволяет любому, кто знаком с пакетом java.nio.file
, легко понять, как использовать ваш.
Однако имейте в виду, что FileSystemProvider
сам по себе не соответствует никаким интерфейсам и не расширяет какие-либо классы внутри пакета. Это точка входа, и ваш класс также будет точкой входа. Однако, если вы имитируете структуру метода, вы будете генерировать объекты Channel
для чтения и записи, которые будут соответствовать спецификациям java.nio
, которые можно использовать повторно. Это позволит любому коду, который знает, как работать с каналами, иметь возможность работать с каналами, созданными вашим поставщиком удаленной файловой системы.
Однако моим первым шагом в создании чего-то подобного было бы создание пакета специально для этой удаленной файловой системы. Он будет обрабатывать все коммуникации и реализовывать основные функции, такие как getUploadChannel
, getDownloadChannel
, renameRemoteFile
, copyRemoteFile
, deleteRemoteFile
, и любые другие необходимые функции. Это даст вам хороший интерфейс, основанный на здравом смысле, определенный для этой конкретной файловой системы и ее функций. Этот пакет можно использовать в любом контексте, чтобы просто реализовать соединение с этой файловой системой. Если вы убедитесь, что этот объект использует каналы для загрузки и скачивания файлов, он будет готов к интеграции с любым API, использующим java.nio
.
Только после того, как это будет завершено, протестировано и заработает, я мог бы подумать, какой интерфейс я хотел бы имитировать или реализовать для доставки остальной части команды. Это гарантирует, что любые изменения протокола удаленной файловой системы или Java API будут иметь минимальное влияние на всю систему.
Я бы опустился и испачкался и использовал FTP-подобный протокол. Проблема с реализацией низкоуровневых API вместо высокоуровневых API заключается в том, что вы маскируете все истинные затраты и упрощаете то, что на самом деле чрезвычайно сложно или дорого. Рассмотрим, например, seek ().
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.