/
IVEinzelstreife
/
ProgrammerResume
Обзор
Документация
Войти
/
IVEinzelstreife
/
ProgrammerResume
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Models/Skill.cs
137 строк
7 KB
Илья Куракин
Загрузить файлы в «Models»
05 июл 2026, 09:35
Верифицирован
05 июл 2026, 09:35
8473abd
Код
Авторство
О чём код?
/*======================================= КЛАСС МОДЕЛИ - Skill ======================================== Класс модели: * Реализует готовые интерфейсы * Работает с заранее прописанными свойствами и конструкторами * Задействует статические методы * Занимается переопределением наслелованных методов Модель в C# - это специальный класс, который описывает сущность предметной области. В данном случае будет описана сущность навыка (Skill) */ using ProgrammerResume.Models.Enums; using ProgrammerResume.Models.Interfaces; namespace ProgrammerResume.Models { // Класс Skill будет описывать сущность наввыка программиста и реализовывать интерфейсы ISummarizable и IValitable. public class Skill : ISummarizable, IValitable { /* СВОЙСТВА С РАЗНЫМИ УРОВНЯМИ ДОСТУПА: - Приватное поле (private field) - внутренняя переменная класса, недоступная извне. (_yearsOfExperience) - Публичное свойство (public property) - свойство, контролирующее доступ к приватному полю (YearsOfExperience), через геттер и сеттер в нем можно добавить программную логику (валидацию, логирование и т.д.) */ private int _yearsOfExperience; // Название навыка public string Name { get; set; } = string.Empty; // Уровень владения навыком public SkillLevel Level { get; set; } // Категория навыка public string Category { get; set; } = "Общие"; // Количество лет опыта владения данным навыком public int YearsOfExperience { get { return _yearsOfExperience; } set { if (value < 0) throw new ArgumentException("Количество лет опыта владения навыком не должно быть отрицательным", nameof(value)); if (value > 50) throw new ArgumentException("Слишком большое значение", nameof(value)); _yearsOfExperience = value; } } // URL иконки технологии (опционально) public string? IconUrl { get; set; } /* ---- КОНСТРУКТОРЫ: - Конструктор с параметрами - для удобства создания объектов класса. - Конструктор по умолчанию - для работы MVC-реаализацией */ // Полный конструктор - задаёт все основные поля public Skill(string name, SkillLevel level, string category, int yearsOfExperience = 0) { Name = name ?? throw new ArgumentNullException(nameof(name)); Level = level; Category = category ?? "Общие"; YearsOfExperience = yearsOfExperience; } public Skill() { // Конструктор по-умолчанию необходим для десериализации экземпляров Name = string.Empty; Category = "Общие"; } // ---- МЕТОДЫ: public static string GetLevelDescription(SkillLevel level) { /* Статический метод. Обозначается ключевым словом static, что свидетельствует о том, что: * Метод принадлежит классу, а не конкретному объекту. * Вызывается через имя класса: Skill.GetLevelDescription(...) * Не имеет доступа к указателю this и нестатическим членам */ return level switch { SkillLevel.Beginner => "🟩", SkillLevel.Junior => "🟨", SkillLevel.Middle => "🟧", SkillLevel.Senior => "🟥", SkillLevel.Expert => "⬛", _ => "❓ Неизвестно" }; } public static string GetLevelCssClass(SkillLevel level) { // Возвращает CSS-класс для визуального отображения уровня владения навыком. Используется в представлениях (Views) return level switch { SkillLevel.Beginner => "badge bg-secondary", SkillLevel.Junior => "badge bg-info", SkillLevel.Middle => "badge bg-primary", SkillLevel.Senior => "badge bg-warning", SkillLevel.Expert => "badge bg-success", _ => "badge bg-dark" }; } // ---- ПЕРЕОПРЕДЕЛЕНИЕ МЕТОДОВ: public override string ToString() { return $"{Name} ({GetLevelDescription(Level)}, {YearsOfExperience} лет)"; } // ---- РЕАЛИЗАЦИЯ ИНТЕРФЕЙСОВ: public string GetSummary() { // Реализация ISummarizable.GetSummary() return $"{Name}: {GetLevelDescription(Level)}, {YearsOfExperience} лет опыта"; } public bool IsValid() { // Релизация IValitable.GetValidationErrors(). return !GetValidationErrors().Any(); } public IEnumerable<string> GetValidationErrors() { var errors = new List<string>(); if (string.IsNullOrWhiteSpace(Name)) errors.Add("Название навыка не может быть пустым."); if (YearsOfExperience < 0) errors.Add($"Навык '{Name}': отрицательный опыт."); return errors; } } }