Урок 88. Презентация проекта

📁 Блок: Финальный проект ⏱️ Время изучения: ~180 мин 🎯 Сложность: Продвинутая
#from #as #and #min #max #count #import #def #return #with #close #try #finally #list

⚡ Кратко: старый vs новый подход

Финальный проект — повод применить современные практики: модули вместо монолита, параметризованные запросы вместо конкатенации строк, .env вместо секретов в коде.

  • Монолитный файл → модули по ответственности.
  • Inline SQL → параметризованные запросы.
  • Пароли в коде → переменные окружения через .env.

Что запомнить: чистая архитектура проще в поддержке и безопаснее.

Частая ошибка: «это же учебный проект, можно не заморачиваться» — но именно здесь закрепляются рабочие привычки.

⚖️ Монолитный подход vs модульная архитектура

Монолитный подходМодульная архитектура
Весь код в одном файле main.py: меню, SQL, MongoDB, форматирование. Код разделён: main.py, mysql_connector.py, log_writer.py, log_stats.py, formatter.py.
Сложно тестировать отдельные части. Каждый модуль можно проверить отдельно в интерпретаторе.
Одно изменение затрагивает много функций. Изменение формата вывода не трогает логику поиска.
Повторяющийся код копируется в разных местах. Общие операции вынесены в функции и переиспользуются.

⚖️ Inline SQL vs параметризованные запросы

Inline SQL (небезопасно)Параметризованные запросы
query = f"SELECT * FROM film WHERE title LIKE '%{keyword}%'"
cursor.execute(query)
query = "SELECT * FROM film WHERE title LIKE %s"
cursor.execute(query, (f"%{keyword}%",))
Риск SQL-инъекции: пользователь может ввести '; DROP TABLE film; --. Данные экранируются драйвером базы данных автоматически.
Трудно читать и поддерживать. SQL-шаблон отделён от значений, код чище.

⚖️ Секреты в коде vs файл .env

Секреты в кодеПеременные окружения через .env
password = "verystrongpassword"
import os
from dotenv import load_dotenv
load_dotenv()
password = os.getenv("DB_PASSWORD")
Пароль попадает в Git и виден всем. Файл .env добавлен в .gitignore.
Для смены пароля приходится править код. Пароль меняется в одном файле без изменения кода.
⚠️ Для учебного проекта допустимо оставить учебные реквизиты в коде, но в реальной работе всегда используйте переменные окружения.