2.8 KiB
2.8 KiB
Диаграмма классов Universal Git Analyzer OOP
Основные классы
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
Связи
UniversalGitAnalyzerApp --> StorageManager
UniversalGitAnalyzerApp --> GitAnalyzer
StorageManager --> UserProfile
GitAnalyzer --> RepositoryInfo
RepositoryInfo --> CommitInfo
RepositoryInfo --> BranchInfo
Объекты системы во время работы
Пример объектов, которые появляются при запуске:
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являются объектами предметной области.
То есть система теперь представлена не набором отдельных функций, а объектами, у каждого из которых есть своя зона ответственности.