12_Архитектура_решения.md - YaroslavGit28/os.sys-PY GitHub Wiki
12. Архитектура решения
12.1. Архитектурная идея
Решение построено по простому принципу:
- один модуль (
file_manager.py); - набор функций с узкой ответственностью;
- единая точка управления (
main) через меню; - разделение на слои:
- UI-слой (ввод/вывод),
- слой файловых операций,
- слой системных команд.
12.2. Слои системы
UI-слой
clear_screen(),print_header(),show_menu();- сбор ввода пользователя и возврат управления.
Слой файловой логики
list_dir(),list_dir_scandir(),change_dir();make_dir(),make_dirs(),make_empty_file();remove_item(),rename_item(),replace_item();show_file_info(),touch_file(),check_access();- работа с
CURRENT_DIRчерезos.getcwd/os.chdir.
Слой системной интеграции
open_explorer(),open_shell_here();- формирование ОС-специфичных команд;
- запуск команд через
os.system.
Слой системной диагностики
show_env_demo();show_system_info();- демонстрация
os.environ,os.getenv,os.getpid,os.cpu_count,os.getlogin.
12.3. Подробная диаграмма компонентов
flowchart TB
subgraph INPUT[Ввод пользователя]
U[Пользователь]
end
subgraph APP[file_manager.py]
MAIN[main()]
MENU[show_menu()]
HDR[print_header()]
CLS[clear_screen()]
CURR[(CURRENT_DIR)]
L[list_dir()]
LS[list_dir_scandir()]
C[change_dir()]
M[make_dir()]
MM[make_dirs()]
MF[make_empty_file()]
R[remove_item()]
RN[rename_item()]
RP[replace_item()]
FI[show_file_info()]
TU[touch_file()]
AC[check_access()]
EV[show_env_demo()]
SI[show_system_info()]
E[open_explorer()]
S[open_shell_here()]
end
subgraph OS[ОС и внешние команды]
CMD1[explorer/open/xdg-open]
CMD2[start powershell]
FS[Файловая система]
end
U --> MAIN
MAIN --> CLS
MAIN --> HDR
MAIN --> MENU
MAIN --> L
MAIN --> LS
MAIN --> C
MAIN --> M
MAIN --> MM
MAIN --> MF
MAIN --> R
MAIN --> RN
MAIN --> RP
MAIN --> FI
MAIN --> TU
MAIN --> AC
MAIN --> EV
MAIN --> SI
MAIN --> E
MAIN --> S
L --> CURR
C --> CURR
M --> CURR
R --> CURR
L --> FS
LS --> FS
C --> FS
M --> FS
MM --> FS
MF --> FS
R --> FS
RN --> FS
RP --> FS
FI --> FS
TU --> FS
AC --> FS
E --> CMD1
S --> CMD2
12.4. Почему архитектура подходит учебной задаче
- Простая навигация по коду — всё в одном файле.
- Понятные зависимости — функции почти независимы, кроме общего
CURRENT_DIR. - Лёгкое расширение — новый пункт меню добавляется без изменения остальных.
- Явная демонстрация
os.system— видно, где и зачем вызываются системные команды.
12.5. Вариант без Python (сравнение архитектур)
Если бы задача решалась только скриптами ОС:
- нужен
.bat/.ps1(Windows) и отдельно.sh(Linux/macOS); - меню и логика развилок пишутся по-разному;
- код труднее сделать единым.
Python-подход даёт одну архитектуру и единые принципы, даже если команды в os.system различаются.
12.6. Разбор кода по шагам: ветвление open_explorer()
if os.name == "nt":
cmd = f'explorer "{CURRENT_DIR}"'
elif sys.platform == "darwin":
cmd = f'open "{CURRENT_DIR}"'
else:
cmd = f'xdg-open "{CURRENT_DIR}"'
os.system(cmd)
Пояснение:
- Ветки по платформе изолируют ОС-зависимость в одном месте.
- Команда хранится в
cmd, что облегчает логирование и отладку. - Кавычки вокруг пути нужны для директорий с пробелами.
os.system(cmd)— конечная точка интеграции Python с shell-командой.
Архитектурный вывод:
- такой код лучше держать в отдельной функции, а не размазывать по
main; - если нужно заменить
os.systemнаsubprocess, изменится только этот слой.