Clinic App
Еволюція проєкту
22 лабораторні заняття — один проєкт, що росте від перших рядків до production-архітектури.
Перший код
Ізольовані задачі без доменної моделі. Базовий синтаксис, масиви, алгоритми.
Sandbox
Основи C#
Окремий консольний проєкт
Поняття
Фундамент будь-якої програми — від мобільного застосунку до хмарного мікросервісу. Без цих конструкцій не існує жодного production-коду.
Нові файли
- +
sandbox/intro/Task1.cs … Task8.cs - +
sandbox/intro/Program.cs
Sandbox
Масиви
Окремий консольний проєкт
Поняття
Матриці пікселів у графіці, звукові буфери, таблиці Excel — все це масиви. Алгоритми пошуку і сортування лежать в основі кожної бази даних і пошукового рушія.
Нові файли
- +
sandbox/arrays/Task1.cs … Task8.cs - +
sandbox/arrays/Program.cs
Доменна модель
Проєкт народжується. Класи, типи, інкапсуляція — фундамент системи клініки.
Catalog
Класи
Пацієнти, лікарі, записи, звіт
Поняття
Patient, Doctor, Appointment — ті самі сутності, що живуть у реальних медичних системах (OpenEMR, медичний модуль SAP). Клас — будівельний блок будь-якого OOP-застосунку.
Нові файли
- +
Patient.cs - +
Doctor.cs - +
Appointment.cs - +
PatientManager.cs - +
DoctorManager.cs - +
AppointmentManager.cs - +
Clinic.cs
Core types
Члени класу
Типи крові, спеціальності, статистика, розклад
Поняття
enum OrderStatus є в кожному інтернет-магазині, struct DateTime і struct Vector3 — в .NET і Unity. Індексатори використовуються в Dictionary<K,V> і колекціях стандартної бібліотеки.
Нові файли
- +
Enums/BloodType.cs - +
Enums/Speciality.cs - +
Enums/AppointmentStatus.cs - +
Models/WorkSchedule.cs - +
Utils/ClinicFormatter.cs
Patients+
Інкапсуляція
Валідація і зрозумілі помилки замість падіння
Поняття
Кожна форма на сайті та кожен API-endpoint валідує вхідні дані саме так. Явна валідація у сеттерах гарантує, що система ніколи не збереже некоректний стан.
Нові файли
- +
Utils/ClinicValidator.cs - +
GrowablePatientManager.cs - +
Models/* - +
Managers/*
ООП-механіки
Ієрархії, контракти, поліморфізм. Система починає розрізняти типи сутностей.
MedicalRecords
Наслідування
Медична картка
Поняття
Payment → CashPayment/CardPayment у банківських системах, Document → Invoice/Contract у ERP, Event → ClickEvent/KeyEvent у UI-фреймворках. Abstract class — шаблон для будь-якої ієрархії сутностей.
Нові файли
- +
Models/MedicalRecord.cs - +
Models/Diagnosis.cs - +
Models/LabResult.cs - +
Models/Prescription.cs - +
Managers/MedicalRecordManager.cs
Billing
Інтерфейси
Рахунки
Поняття
IPayable реалізується по-різному для готівки і картки, але система виставляє рахунок однаково — саме так працюють платіжні шлюзи (Stripe, LiqPay, WayForPay).
Нові файли
- +
Interfaces/IPayable.cs - +
Interfaces/ICancellable.cs - +
Interfaces/ISchedulable.cs - +
Managers/BillingManager.cs
Appointments+
Поліморфізм
Внутрішні типи прийомів
Поняття
У WPF і WinForms кожен Button, TextBox, ListView є Control — система малює їх через один цикл. В ASP.NET Controller — базовий клас, ваш UserController поліморфно обробляє HTTP-запити.
Нові файли
- +
Models/RegularAppointment.cs - +
Models/UrgentAppointment.cs - +
Models/SpecialistAppointment.cs
Колекції та події
Generics, рефлексія, файли, події — проєкт набуває виробничих звичок .NET.
Waiting
Generics
Черга очікування
Поняття
Repository<T> — стандартний патерн доступу до даних у Entity Framework і Dapper: один клас замість окремого коду для кожної сутності. List<T> є в кожному .NET-застосунку.
Нові файли
- +
Models/WaitingQueue.cs - +
Interfaces/IIdentifiable.cs - +
Managers/Repository.cs
Analytics
Ітератори та компаратори
Аналітика
Поняття
yield return дозволяє читати мільйони рядків з БД без завантаження у пам'ять — саме так Entity Framework стрімить результати. IEnumerable<T> — основа LINQ і всіх колекцій .NET.
Нові файли
- +
Models/DoctorStats.cs - +
Models/PatientStats.cs - +
Comparators/* - +
Managers/AnalyticsManager.cs
Treatment plans
Reflection & Attributes
Плани лікування, автогенерація форм
Поняття
[Required], [MaxLength], [Route] в ASP.NET MVC читаються через рефлексію автоматично. Entity Framework, Newtonsoft.Json і Swagger генерують поведінку з атрибутів — без рядка вашого коду.
Нові файли
- +
Attributes/RequiredFieldAttribute.cs - +
Attributes/MaxLengthAttribute.cs - +
Attributes/ValidRangeAttribute.cs - +
Utils/ModelValidator.cs - +
Utils/FormBuilder.cs - +
Models/TreatmentPlan.cs - +
Managers/TreatmentPlanManager.cs
Persistence
File I/O
Журнал, імпорт, експорт, сесія
Поняття
Кожна CRM і ERP-система має модуль імпорту/експорту CSV і текстові логи. Імпорт прайс-листів, вивантаження звітів у Excel, ротація лог-файлів — щоденна реальність backend-розробника.
Нові файли
- +
Utils/ClinicLogger.cs - +
Utils/CsvExporter.cs - +
Utils/CsvImporter.cs - +
Utils/SessionManager.cs
Automation
Events & Delegates
Автоматичні реакції системи
Поняття
Паттерн event/delegate — основа WPF, WinForms і SignalR. У веб-застосунках події — це WebSocket-повідомлення реального часу: чати, біржові котирування, медичний моніторинг.
Нові файли
- +
Events/AppointmentEvents.cs - +
Events/PatientEvents.cs - +
Events/BillingEvents.cs - +
Utils/PatientPassportWriter.cs - +
Utils/SessionEventTracker.cs
Запити та функції
LINQ і функціональний стиль перетворюють дані на звіти та аналітику.
Reports
LINQ
Звіти по спеціальностях, топ, місячна виручка
Поняття
В Entity Framework запити Where, GroupBy, Join транслюються з LINQ у SQL автоматично. Те, що ви пишете тут, генерує реальні SQL-запити до PostgreSQL або MS SQL Server.
Нові файли
- +
Models/SpecialityReport.cs - +
Managers/ReportManager.cs
Filters
Functional C#
Фільтри, процесор, пайплайн
Поняття
Middleware pipeline в ASP.NET Core, LINQ-ланцюги, RxNET — все це функціональна композиція у production. Методи розширення — стандарт написання виразного та читабельного C# коду.
Нові файли
- +
Extensions/AppointmentExtensions.cs - +
Extensions/DoctorExtensions.cs - +
Extensions/PatientExtensions.cs - +
Managers/AppointmentFilter.cs - +
Managers/AppointmentPipeline.cs - +
Managers/AppointmentProcessor.cs
UI та база даних
Справжній TUI-інтерфейс і SQL-база. Система стає повноцінним застосунком.
Console UI
Console UI
Повноцінний TUI: таблиці, дерево, BarChart
Поняття
Spectre.Console використовується у реальних CLI-інструментах: dotnet CLI, Azure CLI, GitHub CLI. Навичка будувати TUI необхідна при розробці DevOps-скриптів і адміністративних утиліт.
Нові файли
- +
UI/ClinicRenderer.cs
EF Core
EF Core: основи
Підключення SQLite бази даних
Поняття
DbContext і Code-First migrations — стандарт у .NET enterprise. Більшість стартапів і корпоративних систем використовують EF Core для роботи з PostgreSQL або SQL Server без написання SQL вручну.
Нові файли
- +
Data/ClinicDbContext.cs - +
Data/DbSeeder.cs
EF Core
EF Core: зв'язки
Зв'язки між таблицями, Include
Поняття
Правильне завантаження зв'язків через Include — ключова різниця між запитом за 5 мс і зависанням сторінки на 10 секунд. Проблема N+1 запитів — одна з найчастіших причин деградації production-систем.
Нові файли
- +
Data/ClinicRepository.cs
EF Core
EF Core: Advanced
TPH, Owned Entity, оптимістична конкуренція
Поняття
RowVersion використовують банки і медичні системи, щоб два лікарі не перезаписали одночасно одного пацієнта. Оптимістична конкуренція — стандарт у будь-якій системі з одночасним доступом до даних.
Нові файли
- +
Models/EmergencyContact.cs
EF Core
EF Core: запити
IQueryable, пагінація, проекції, soft delete
Поняття
Кожен адмін-портал на .NET використовує пагінацію (Skip/Take) і проекції (Select DTO), щоб не тягнути зайві дані з БД. Soft delete — стандарт у regulated-системах, де дані не можна фізично видаляти.
Нові файли
- +
Data/ClinicQueryService.cs - +
Models/PatientSummaryDto.cs - +
Models/AppointmentSummaryDto.cs
Архітектура
Async/await і SOLID+DI — фінальний рівень: код, готовий до production.
Async
Async / Await
Асинхронне меню, дашборд, HTTP клієнт
Поняття
ASP.NET Core обробляє тисячі запитів одночасно завдяки async. Без нього кожен HTTP-запит блокував би потік — сервер впав би під навантаженням уже при перших сотнях користувачів.
Нові файли
- +
Data/AsyncClinicService.cs - +
Data/ClinicHttpClient.cs - +
Models/ClinicDashboard.cs
Architecture
SOLID + DI
SOLID демо, DI-контейнер, патерни
Поняття
DI-контейнер і SOLID — архітектурна основа ASP.NET Core: кожен сервіс реєструється через AddScoped/Singleton і вводиться через конструктор. Це стандарт, який ви побачите в першому ж production-.NET репозиторії.
Нові файли
- +
Models/ClinicConfig.cs - +
Strategies/ICostStrategy.cs - +
Strategies/RegularCostStrategy.cs - +
Services/IPatientService.cs - +
Services/PatientService.cs - +
Services/LoggingPatientService.cs - +
Infrastructure/ServiceContainer.cs