Глава 23 · Часть I · Git и GitHub с нуля

Что мы будем создавать: SafeSort

Программа, которая наводит порядок в файлах, — сначала показывает, что сделает, и только потом делает это по команде.

SafeSort · Часть 1 из 6
Git и GitHubПланированиеПроектРеализацияТесты и CIРелиз

До сих пор мы писали программы по частям: функции, игры, интерфейсы. Теперь соберём один проект целиком и доведём его до состояния, которое можно разместить на GitHub. Программа называется SafeSort, и вот что она делает.

Было
Downloads/
report.pdf
photo.jpg
archive.zip
notes.txt
copy_of_notes.txt
Стало
Downloads/
Sorted/
documents/
report.pdf
notes.txt
copy_of_notes.txt
images/
photo.jpg
archives/
archive.zip
notes.txt и copy_of_notes.txt — одинаковое содержимое; SafeSort сообщит об этом отдельно, а не удалит файл сам.

Сначала программа только показывает, что собирается сделать. Переместить файлы может исключительно отдельная, явно вызванная команда:

Пользовательзапускает командуSafeSortscan / plan / apply /duplicates / undoФайловая системачитается или меняется
Только читают
scan — показывает найденные файлы
plan — показывает план перемещений
duplicates — показывает совпадения
Меняют файлы
apply — перемещает файлы
undo — возвращает файлы на место
~/safesort $ safesort plan ~/Downloads
5 move operations planned.
No files have been changed.

Файловая система после этой команды осталась прежней — plan только описывает будущие перемещения. Это различие между «показать» и «сделать» — главная идея всего проекта, и мы будем возвращаться к ней ещё не раз.

Что должна уметь первая версия

Программа должна уметь:

Как программа должна себя вести:

Первый список в разработке принято называть функциональными требованиями — что программа делает. Второй — нефункциональными: не «что», а «как», какими свойствами обладает поведение программы независимо от команды.

Что не будем делать в первой версии

Чтобы закончить проект, а не растягивать его бесконечно, сразу ограничим задачу:

Не входит в первую версиюПочему
Автоматическое удаление дубликатовУдаление данных без явного подтверждения — риск, а не удобство
Графический интерфейсКомандную строку проще реализовать, протестировать и объяснить
Загрузка файлов в облакоПрограмма работает только с локальной файловой системой
Классификация по содержимому файлаКлассификация по расширению уже решает основную задачу

Коротко

  • scan, plan и duplicates только читают файловую систему; apply сортирует файлы, а undo выполняет обратное перемещение.
  • «Показать план» и «выполнить план» — разные шаги, и это различие определяет всю архитектуру программы.
  • Функциональные требования — что программа делает; нефункциональные — какими свойствами обладает её поведение.