Как спроектировать расширяемый сортировщик файлов

Иногда автоматизация начинается с простой задачи: «разложить файлы по папкам». Но если делать это «на коленке», через полгода получается монолит, в который страшно добавить новый фильтр.

В проекте ImageWalker я поставил цель: сделать инструмент, в который можно добавить новый критерий сортировки за 15 минут, не трогая ядро.

🔧 Архитектурные решения:Плагинная система на основе интерфейсов: каждый фильтр реализует BaseFilterPlugin + Filter, регистрируется через декоратор @PluginRegistry.register. Ядро ничего не знает о конкретных фильтрах — только о контрактах. • Инверсия зависимостей (DIP): высокоуровневая логика сортировки зависит от абстракций, а не от реализаций. Это позволяет легко тестировать фильтры моками и заменять их без изменения ядра. • Типизация и валидация: конфигурация плагинов описывается через @dataclass + PluginConfig, что даёт статическую проверку и автодополнение в IDE. • Многоуровневая сортировка: фильтры можно комбинировать в произвольном порядке через order, что позволяет строить гибкие пайплайны обработки.

🤖 AI-плагин: Интегрировал кастомную свёрточную нейросеть (6 классов, Intel Image Classification) как один из фильтров. Модель загружается лениво, инференс работает в ~3 ГБ RAM. Важно: доменная логика классификации изолирована от файловой — это упрощает тестирование и замену модели.

📊 Результат: • Сотни файлов обработаны за один запуск, 100% применимости к плагинам • Добавление нового фильтра = реализация 2 интерфейсов + регистрация, без правки ядра • Документация через Sphinx

🔗 Репозиторий: https://github.com/Delshi/image_walker 🔗 Архитектура CNN: https://github.com/Delshi/Intel-Image-Classification

Готов обсудить подходы к плагинным архитектурам, инверсии зависимостей и интеграции ML-моделей в CLI-инструменты.

#Python #SoftwareArchitecture #PluginSystem #CleanCode #MachineLearning #OpenSource #Backend #OpenToWork

Как спроектировать расширяемый сортировщик файлов | Сетка — социальная сеть от hh.ru