98 lines
2.8 KiB
Markdown
98 lines
2.8 KiB
Markdown
# Диаграмма классов Universal Git Analyzer OOP
|
||
|
||
## Основные классы
|
||
|
||
```text
|
||
UniversalGitAnalyzerApp
|
||
├── storage: StorageManager
|
||
├── git_analyzer: GitAnalyzer
|
||
├── current_user
|
||
├── current_repo
|
||
├── current_index
|
||
└── current_data
|
||
|
||
StorageManager
|
||
├── data_file
|
||
├── register_user(login, password)
|
||
├── check_user(login, password)
|
||
├── get_repositories(login)
|
||
├── add_repository(login, link)
|
||
└── delete_repository(login, link)
|
||
|
||
UserProfile
|
||
├── login
|
||
├── password_hash
|
||
├── repositories
|
||
└── to_dict()
|
||
|
||
GitAnalyzer
|
||
├── languages
|
||
├── ignore_dirs
|
||
├── normalize_link(link)
|
||
├── clone_repo(link)
|
||
├── get_commits(repo_dir)
|
||
├── get_visible_branches_at_commit(repo_dir, selected_commit)
|
||
├── analyze_files_for_branches(repo_dir, selected_commit)
|
||
├── analyze_repository(link, selected_index)
|
||
└── format_analysis(data)
|
||
|
||
RepositoryInfo
|
||
├── link
|
||
├── repo_name
|
||
├── default_branch
|
||
├── branches
|
||
├── commits
|
||
├── total_files
|
||
└── total_lines
|
||
|
||
CommitInfo
|
||
├── hash
|
||
├── short
|
||
├── author
|
||
├── date
|
||
├── timestamp
|
||
└── message
|
||
|
||
BranchInfo
|
||
├── name
|
||
├── ref
|
||
├── total_files
|
||
└── total_lines
|
||
```
|
||
|
||
## Связи
|
||
|
||
```text
|
||
UniversalGitAnalyzerApp --> StorageManager
|
||
UniversalGitAnalyzerApp --> GitAnalyzer
|
||
StorageManager --> UserProfile
|
||
GitAnalyzer --> RepositoryInfo
|
||
RepositoryInfo --> CommitInfo
|
||
RepositoryInfo --> BranchInfo
|
||
```
|
||
|
||
## Объекты системы во время работы
|
||
|
||
Пример объектов, которые появляются при запуске:
|
||
|
||
```text
|
||
app = UniversalGitAnalyzerApp()
|
||
storage = StorageManager()
|
||
git_analyzer = GitAnalyzer()
|
||
user = UserProfile("egor", password_hash, repositories)
|
||
repository = RepositoryInfo(link, repo_name, default_branch, branches, commits)
|
||
commit = CommitInfo(hash, short, author, date, timestamp, message)
|
||
branch = BranchInfo(name, ref, total_files, total_lines)
|
||
```
|
||
|
||
## Что сказать на защите
|
||
|
||
В OOP-версии приложение разделено на классы:
|
||
|
||
- `UniversalGitAnalyzerApp` отвечает за интерфейс.
|
||
- `StorageManager` отвечает за локальное хранение пользователей и ссылок.
|
||
- `GitAnalyzer` отвечает за анализ Git-репозитория.
|
||
- `UserProfile`, `RepositoryInfo`, `CommitInfo`, `BranchInfo` являются объектами предметной области.
|
||
|
||
То есть система теперь представлена не набором отдельных функций, а объектами, у каждого из которых есть своя зона ответственности.
|