You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Файловый менеджер на .NET MAUI
**Разработчик:** Пилипенко Степан Андреевич (2025 год)
---
## Введение
### Цель работы
Разработка кроссплатформенного файлового менеджера с использованием современной технологии .NET MAUI, обеспечивающего эффективную работу с файловой системой на различных операционных системах.
### Актуальность
В современном мире с ростом мобильных устройств и разнообразием операционных систем возрастает потребность в кроссплатформенных решениях. Файловые менеджеры остаются одним из наиболее востребованных типов приложений, а возможность их работы на разных платформах из единой кодовой базы значительно сокращает затраты на разработку и поддержку.
## Выбор технологий
### .NET MAUI как основная платформа
**Обоснование выбора:**
1. **Единая кодовая база** - возможность разработки для Windows, macOS, Android и iOS из одного проекта
2. **Производительность** - нативная компиляция и прямой доступ к API платформ
3. **Современный UI** - поддержка последних стандартов пользовательского интерфейса
4. **Экосистема .NET** - богатая библиотека компонентов и инструментов
5. **Поддержка Microsoft** - долгосрочная поддержка и активное развитие платформы
### Преимущества перед альтернативами
- **По сравнению с Electron**: меньший расход памяти, лучшая производительность
- **По сравнению с Flutter**: интеграция с экосистемой .NET, знакомый язык C#
- **По сравнению с нативной разработкой**: сокращение времени разработки в 2-3 раза
## Архитектура решения
### Многослойная архитектура
```
┌─────────────────────────────────────────┐
│ Presentation Layer │
│ (MainPage.xaml) │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Business Logic │
│ (Сервисы, Менеджеры) │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Data Access │
│ (FileSystemService, etc.) │
└─────────────────────────────────────────┘
```
### Ключевые компоненты
#### 1. **Presentation Layer**
- **MainPage.xaml** - основной пользовательский интерфейс
- Две панели для навигации по файловой системе
- Панель инструментов с основными операциями
#### 2. **Business Logic Layer**
##### PanelManager
- Управление состоянием панелей
- Навигация и выделение элементов
- Координация между левой и правой панелями
##### FileOperations
- Копирование файлов и директорий
- Перемещение элементов
- Удаление и создание папок
- Открытие файлов
##### KeyboardService
- Обработка клавиатурных сокращений
- Кроссплатформенная поддержка горячих клавиш
- Навигация с помощью WASD
#### 3. **Data Access Layer**
##### FileSystemService
- Абстракция над файловой системой
- Получение содержимого директорий
- Кроссплатформенные пути
##### PathHelper
- Работа с путями файловой системы
- Определение домашней директории
- Кроссплатформенные операции с путями
### Принципы проектирования
#### 1. **Инверсия зависимостей (DIP)**
```csharp
public interface IPanelManager
public interface IFileOperations
public interface IKeyboardService
```
#### 2. **Принцип единственной ответственности (SRP)**
Каждый сервис отвечает за конкретную функциональность
#### 3. **Интерфейс-ориентированное программирование**
Легкая замена реализаций и тестирование
## Функциональные возможности
### Основные операции
1. **Навигация** - просмотр файловой системы через две панели
2. **Копирование** (F5) - копирование файлов и папок между панелями
3. **Перемещение** (F6) - перемещение элементов между панелями
4. **Создание папок** (F7) - создание новых директорий
5. **Удаление** (F8) - удаление файлов и папок
6. **Быстрая навигация** - переход в домашнюю директорию
### Управление с клавиатуры
- **WASD** - навигация по файлам
- **Space/Enter** - открытие файлов и папок
- **F5-F8** - операции с файлами
- **H** - переход в домашнюю директорию
### Кроссплатформенность
- Поддержка Windows и macOS
- Единый код для разных платформ
- Адаптация к особенностям файловых систем
## Технические особенности
### Обработка файловых операций
```csharp
public async Task<bool> CopyAsync(string sourcePath, string targetPath)
public async Task<bool> MoveAsync(string sourcePath, string targetPath)
public async Task<bool> DeleteAsync(string path)
```
### Навигационная система
- Рекурсивный обход директорий
- Поддержка специальных элементов (".." для навигации вверх)
- Оптимизированная работа с большими директориями
### Пользовательский интерфейс
- Интуитивная двухпанельная layout
- Визуальное выделение активных элементов
- Статус-бар с текущими путями
## Результаты разработки
### Достигнутые цели
1. ✅ Создан полнофункциональный файловый менеджер
2. ✅ Обеспечена кроссплатформенность (Windows/macOS)
3. ✅ Реализованы все основные файловые операции
4. ✅ Обеспечена высокая производительность
5. ✅ Создан удобный пользовательский интерфейс
### Производительность
- Быстрая загрузка директорий
- Эффективная работа с большими файлами
- Минимальное потребление памяти
### Качество кода
- Чистая архитектура с разделением ответственности
- Полная покрытие интерфейсами для тестирования
- Современные практики C# и .NET
## Заключение
Разработанный файловый менеджер демонстрирует эффективность использования .NET MAUI для создания кроссплатформенных приложений. Приложение успешно решает поставленные задачи и предоставляет пользователю удобный инструмент для работы с файловой системой на разных платформах.
### Перспективы развития
1. Добавление поддержки сетевых протоколов (FTP, SFTP)
2. Реализация поиска по файловой системе
3. Добавление предпросмотра файлов
4. Поддержка плагинов и расширений
5. Интеграция с облачными хранилищами
### Выводы
Использование .NET MAUI позволило создать производительное кроссплатформенное приложение с минимальными затратами на разработку. Архитектура на основе сервисов и интерфейсов обеспечивает легкую расширяемость и поддерживаемость кода, что делает решение перспективным для дальнейшего развития.