Что мы будем создавать: SafeSort
Программа, которая наводит порядок в файлах, — сначала показывает, что сделает, и только потом делает это по команде.
До сих пор мы писали программы по частям: функции, игры, интерфейсы. Теперь соберём один проект целиком и доведём его до состояния, которое можно разместить на GitHub. Программа называется SafeSort, и вот что она делает.
Сначала программа только показывает, что собирается сделать. Переместить файлы может исключительно отдельная, явно вызванная команда:
Файловая система после этой команды осталась прежней — plan
только описывает будущие перемещения. Это различие между «показать» и «сделать» —
главная идея всего проекта, и мы будем возвращаться к ней ещё не раз.
Что должна уметь первая версия
Программа должна уметь:
- показать найденные файлы, разложенные по категориям;
- показать план будущих перемещений, ничего не меняя;
- выполнить перемещения только по явной команде;
- найти файлы с одинаковым содержимым;
- отменить последнюю выполненную операцию.
Как программа должна себя вести:
- не изменять файлы без явной команды;
- не перезаписывать существующий файл молча;
- одинаковый ввод даёт одинаковый план — никакой случайности;
- вся обработка происходит локально, без сети;
- логику можно проверить автоматическими тестами, не трогая настоящие файлы.
Первый список в разработке принято называть функциональными требованиями — что программа делает. Второй — нефункциональными: не «что», а «как», какими свойствами обладает поведение программы независимо от команды.
Что не будем делать в первой версии
Чтобы закончить проект, а не растягивать его бесконечно, сразу ограничим задачу:
| Не входит в первую версию | Почему |
|---|---|
| Автоматическое удаление дубликатов | Удаление данных без явного подтверждения — риск, а не удобство |
| Графический интерфейс | Командную строку проще реализовать, протестировать и объяснить |
| Загрузка файлов в облако | Программа работает только с локальной файловой системой |
| Классификация по содержимому файла | Классификация по расширению уже решает основную задачу |
Коротко
- scan, plan и duplicates только читают файловую систему; apply сортирует файлы, а undo выполняет обратное перемещение.
- «Показать план» и «выполнить план» — разные шаги, и это различие определяет всю архитектуру программы.
- Функциональные требования — что программа делает; нефункциональные — какими свойствами обладает её поведение.