Блог

С чего начать? Первое, что приходит в голову, броситься к реализации задачи в условиях цейтнота. Что, если начать с выделения функциональных требований?


Первый этап:


•    загрузка файлов перетаскиванием;


•     клиентские проверки:


–     максимальный размер файла;


–     разрешенные типы файлов;


–     максимальное число файлов;


•     состояние загрузки;


•     preview для загруженного изображения;


•     иконка типа загруженного файла;


•     размер файла;


•     режим загрузки только одного файла;


•     загрузка файлов на сервер, скачивание, удаление;


•     инициализация ранее загруженных файлов (для файлов временной и постоянных папок).


Второй этап:


•    загрузка файлов во временную папку, скачивание, удаление;


•     сохранение файлов из временной папки в постоянную;


•     скачивание файлов из постоянной папки,  создание бэкапа, удаление, восстановление из бэкапа;


•     серверные проверки:


–     обязательность;


–     минимальное и максимальное число;


–     разрешенные типы файлов;


–     максимальный размер файла.


 

Выделение функциональных слоёв


•    модуль загрузки файлов:


–     клиентская часть (jQuery-плагин);


–     серверная часть (серверная загрузка файлов);


•    серверная прослойка (интеграционная часть взаимодействия модуля с основным проектом).


Функциональные слои


 

Проектирование модуля загрузки файлов с использованием Areas


Цель: поместить в модуль всю функциональность, требуемую для работы в любом проекте без привязки к конкретной реализации.


Состав Areas

 
•    исходный jQuery-плагин и css;


•    самописный jQuery-плагин инициализации загрузчика файлов с расширением базовой функциональности;


•    контроллер обработки действия с файлами во временной папке (загрузка, скачивание, удаление);


•    модель файла (массив guid, массив temp-файлов, массив сохраненных файлов);


•    класс-валидатор файлов временной папки с возможностью параметрического задания проверок;


•    валидация (биндинг temp-файлов по массиву guid, проверка корректности этих файлов).


 

Модуль загрузки: клиентская часть


Анализ существующих решений в Интернете:


•    платные версии с функциональностью, которая не удовлетворяет всем требованиям – НЕТ;


•    бесплатные версии с частичным решением и негибкой архитектурой – НЕТ;


•    платные решения с полной удовлетворяющей функциональностью – ВОЗМОЖНО;


•    бесплатные решения с гибкой прозрачной архитектурой использования – ДА!


Итог: бесплатное решение «jquery.fs.dropper.js»



JS


 

Модуль загрузки: клиентская часть


•    исходный jQuery-плагин:


–    код не должен редактироваться;


–    код не должен использоваться напрямую (только через плагин инициализации);


•    jQuery-плагин инициализации:


–    должен выполнять инициализацию исходного плагина;


–    должен расширять функциональность исходного плагина до необходимой;


–    должен быть максимально удобным для использования;


–    должен иметь максимально прозрачную реализацию;


–    должен быть хорошо задокументирован.


 

Модуль загрузки: серверная часть


•    должна включать в себя только абстрактную (независимую) часть функциональности;


•    должна быть удобной в использовании (по максимуму с помощью валидаторов и биндеров облегчить жизнь программистам);


•    должен иметь максимально прозрачную реализацию;


•    должен быть хорошо документирован.


 

Проектирование интеграционной прослойки


Цель: поместить в прослойку всю функциональность, которая востребована для использования в основном проекте.


Состав библиотеки:


•    класс-интерфейс по работе с файлами различных видов (перенос из временной папки, удаление файла, создание бэкапа, восстановление из бэкапа);


•    вспомогательные методы по логике работы с файлами различных видов в ФС и БД (получение полного пути к файлам/папке в зависимости от вида файла);


•    класс-валидатор сохраненных файлов с возможностью параметрического задания проверок (указание вида файла);


•    валидация (биндинг сохранённых файлов по полям-описателям, отправляемым на форму при Get-формировании страницы, проверка корректности этих файлов с учетом флага удаления).


 

Прослойка для интеграции модуля в основной проект

 

•    должна включать в себя всю зависимую от основного проекта часть функциональности (информацию о правилах хранения в ФС и БД);


•    должна реализовывать интерфейс для каждого вида файлов;


•    должна быть удобной в использовании (по максимуму с помощью валидаторов и биндеров облегчить жизнь программистам);


•    должна иметь максимально прозрачную реализацию;


•    должна быть хорошо документирована.


 

Финиш


•    запрет вывода плагина в старых версиях браузера (вывод сообщения с запретом инициализации);


•    расширение функциональности jQuery-плагина инициализации загрузчика файлов (в случае необходимости);


•    окончательная интеграция загрузчика файлов в основной проект.


Использование модуля


Автор: Григорий Казаков, руководитель отдела высоконагруженных систем


Возврат к списку