Система управління завданнями, побудована за принципами багатошарової архітектури та патерном MVVM. Реалізує повний цикл обробки даних — від ізольованого сховища через шар репозиторіїв і бізнес-сервісів до графічного інтерфейсу.
Проєкт має високий рівень модульності. Кожна логічна складова винесена в окрему бібліотеку класів (Class Library) для суворого контролю залежностей та дотримання принципів Single Responsibility і Dependency Inversion:
- TaskManager.Common: Містить переліки (
Enums), спільні для всіх рівнів застосунку. - TaskManager.DataModels: Класи для "сирого" зберігання даних у БД/сховищі (
ProjectDataModel,TaskDataModel). Не містять логіки відображення. - TaskManager.DTOModels: Імутабельні Data Transfer Objects (наприклад,
ProjectListDTO,TaskDetailsDto) для передачі готових до відображення даних у шар UI. - TaskManager.CreateModels: Моделі для збору та первинної валідації даних при створенні нових сутностей користувачем.
- TaskManager.EditModels: Моделі для обробки та валідації даних при редагуванні існуючих сутностей.
- TaskManager.Storage: Визначає інтерфейс
IStorageContextта містить реалізаціюInMemoryStorageContext— імітацію бази даних з початковим набором тестових даних. - TaskManager.Repositories: Шар доступу до даних. Відповідає за виконання запитів до
Storageта повертаєDataModels. Ізолює бізнес-логіку від деталей реалізації сховища. - TaskManager.Services: Шар бізнес-логіки. Отримує дані з репозиторіїв, інкапсулює правила розрахунку статистики (наприклад, прогресу) та використовує мапери для конвертації
DataModelsуDTOModels. - TaskManager.Maui: Графічний UI-застосунок на базі .NET MAUI. Побудований суворо за патерном MVVM без коду логіки у файлах
.xaml.cs. Взаємодіє з даними виключно через Compiled Bindings (x:DataType) до DTO. - TaskManager.Tests (не показано в загальній структурі, але присутнє): Юніт-тести (xUnit + Moq) для ізольованого тестування сервісів, маперів та розрахункових властивостей DTO-моделей.
Застосунок використовує єдине головне вікно та Shell-навігацію. Містить три основні сторінки:
- MainPage — відображає список усіх проєктів з назвою та розрахованим відсотком прогресу.
- ProjectDetails — детальна інформація про проєкт: назва, тип, опис, загальний прогрес та список завдань цього проєкту.
- TaskDetails — детальна інформація про конкретне завдання: статус виконання, пріоритет, дедлайн, індикатор прострочення та опис.
Навігація відбувається синхронно через Shell.Current.GoToAsync. Замість передачі цілих об'єктів у пам'яті, між сторінками передаються лише унікальні ідентифікатори (Guid), за якими ViewModels самостійно завантажують свіжі дані через абстракції сервісів.
- MVVM (Model-View-ViewModel): Повне розділення візуальної розмітки (XAML) від логіки керування станом (ViewModels). UI взаємодіє виключно з
DTOModelsі не має доступу доDataModelsчиRepositories. - Dependency Injection (IoC): Створення та надання залежностей керується централізованим IoC-контейнером у
MauiProgram.cs. Сервіси та UI-компоненти отримують необхідні залежності через конструктори (Constructor Injection). - Інкапсуляція та Immutability: Моделі
DTO,CreateModelsтаEditModelsє незмінними після ініціалізації (використанняrecordта публічних властивостей тільки для читання{ get; }), що захищає дані від неконтрольованих мутацій.