Проект среднего уровня: менеджер задач в командной строке
Итоговый проект: собираем генераторы списков, классы, файлы, исключения и тесты в одно настоящее консольное приложение
класс, переживает плохой ввод благодаря исключениям и защищён автоматическими тестами.
- разбить приложение на слои (данные, логика, хранилище, интерфейс), каждый из которых делает одну работу,
- описать пункт списка дел как класс
Taskс методамиto_dict/from_dict, - запрашивать и фильтровать данные с помощью генераторов списков, генераторных выражений и словарей,
- сохранять данные в JSON-файл и восстанавливаться после отсутствующего или испорченного файла с помощью исключений,
- управлять всем этим из командной строки и закрепить поведение модульными тестами.
1. Архитектура: четыре слоя, одно приложение
Частая ошибка новичка - впихнуть всю программу в один длинный скрипт. Профессионалы вместо этого делят её на слои, где у каждого слоя одна обязанность и он общается только с соседями. У нашего менеджера задач их четыре:
- Данные - класс
Task: чем является одно дело. - Логика - класс
TaskManager: добавить, завершить, отфильтровать, посчитать. Он ничего не знает о файлах и экране. - Хранилище -
save/load: превращают задачи в JSON на диске и обратно. Оно ничего не знает о командной строке. - Интерфейс - CLI (
main): читает команду пользователя изargv, вызывает логику, печатает результат.
Зачем это? Потому что каждый слой можно понять, изменить и протестировать отдельно. Вы могли бы заменить JSON-файл базой данных, а CLI - веб-страницей, не трогая логику. Это разделение - самая важная идея всего проекта.