OOP Course
Сьогодні

Clinic App

Еволюція проєкту

22 лабораторні заняття — один проєкт, що росте від перших рядків до production-архітектури.

Фаза 1

Перший код

Ізольовані задачі без доменної моделі. Базовий синтаксис, масиви, алгоритми.

Lab 01

Sandbox

Основи C#

Окремий консольний проєкт

Поняття

  • базові типи
  • умови
  • цикли
  • static методи
  • Console I/O

Фундамент будь-якої програми — від мобільного застосунку до хмарного мікросервісу. Без цих конструкцій не існує жодного production-коду.

Нові файли

  • + sandbox/intro/Task1.cs … Task8.cs
  • + sandbox/intro/Program.cs
Файлів у проєкті 9
Типів C# 0
Lab 02

Sandbox

Масиви

Окремий консольний проєкт

Поняття

  • T[]
  • T[,]
  • T[][]
  • пошук
  • сортування
  • 2D розклад

Матриці пікселів у графіці, звукові буфери, таблиці Excel — все це масиви. Алгоритми пошуку і сортування лежать в основі кожної бази даних і пошукового рушія.

Нові файли

  • + sandbox/arrays/Task1.cs … Task8.cs
  • + sandbox/arrays/Program.cs
Файлів у проєкті 18
Типів C# 0
Фаза 2

Доменна модель

Проєкт народжується. Класи, типи, інкапсуляція — фундамент системи клініки.

Lab 03

Catalog

Класи

Пацієнти, лікарі, записи, звіт

Поняття

  • class
  • constructor
  • properties
  • ToString()
  • масив об'єктів

Patient, Doctor, Appointment — ті самі сутності, що живуть у реальних медичних системах (OpenEMR, медичний модуль SAP). Клас — будівельний блок будь-якого OOP-застосунку.

Нові файли

  • + Patient.cs
  • + Doctor.cs
  • + Appointment.cs
  • + PatientManager.cs
  • + DoctorManager.cs
  • + AppointmentManager.cs
  • + Clinic.cs
Файлів у проєкті 25
Типів C# 6
Lab 04

Core types

Члени класу

Типи крові, спеціальності, статистика, розклад

Поняття

  • enum
  • struct
  • static class
  • indexer
  • overloading
  • out параметр

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
Файлів у проєкті 30
Типів C# 10
Lab 05

Patients+

Інкапсуляція

Валідація і зрозумілі помилки замість падіння

Поняття

  • private поля
  • явні сеттери
  • throw
  • try/catch
  • namespace

Кожна форма на сайті та кожен API-endpoint валідує вхідні дані саме так. Явна валідація у сеттерах гарантує, що система ніколи не збереже некоректний стан.

Нові файли

  • + Utils/ClinicValidator.cs
  • + GrowablePatientManager.cs
  • + Models/*
  • + Managers/*
Файлів у проєкті 35
Типів C# 14
Фаза 3

ООП-механіки

Ієрархії, контракти, поліморфізм. Система починає розрізняти типи сутностей.

Lab 06

MedicalRecords

Наслідування

Медична картка

Поняття

  • abstract class
  • virtual
  • override
  • base()
  • is/as

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
Файлів у проєкті 40
Типів C# 18
Lab 07

Billing

Інтерфейси

Рахунки

Поняття

  • interface
  • кілька інтерфейсів
  • контракти поведінки

IPayable реалізується по-різному для готівки і картки, але система виставляє рахунок однаково — саме так працюють платіжні шлюзи (Stripe, LiqPay, WayForPay).

Нові файли

  • + Interfaces/IPayable.cs
  • + Interfaces/ICancellable.cs
  • + Interfaces/ISchedulable.cs
  • + Managers/BillingManager.cs
Файлів у проєкті 44
Типів C# 22
Lab 08

Appointments+

Поліморфізм

Внутрішні типи прийомів

Поняття

  • polymorphism
  • override
  • sealed
  • new method hiding

У WPF і WinForms кожен Button, TextBox, ListView є Control — система малює їх через один цикл. В ASP.NET Controller — базовий клас, ваш UserController поліморфно обробляє HTTP-запити.

Нові файли

  • + Models/RegularAppointment.cs
  • + Models/UrgentAppointment.cs
  • + Models/SpecialistAppointment.cs
Файлів у проєкті 47
Типів C# 25
Фаза 4

Колекції та події

Generics, рефлексія, файли, події — проєкт набуває виробничих звичок .NET.

Lab 09

Waiting

Generics

Черга очікування

Поняття

  • List<T>
  • Queue<T>
  • generic class
  • where T : interface

Repository<T> — стандартний патерн доступу до даних у Entity Framework і Dapper: один клас замість окремого коду для кожної сутності. List<T> є в кожному .NET-застосунку.

Нові файли

  • + Models/WaitingQueue.cs
  • + Interfaces/IIdentifiable.cs
  • + Managers/Repository.cs
Файлів у проєкті 50
Типів C# 28
Lab 10

Analytics

Ітератори та компаратори

Аналітика

Поняття

  • IComparable<T>
  • IComparer<T>
  • IEnumerable<T>
  • yield return

yield return дозволяє читати мільйони рядків з БД без завантаження у пам'ять — саме так Entity Framework стрімить результати. IEnumerable<T> — основа LINQ і всіх колекцій .NET.

Нові файли

  • + Models/DoctorStats.cs
  • + Models/PatientStats.cs
  • + Comparators/*
  • + Managers/AnalyticsManager.cs
Файлів у проєкті 55
Типів C# 32
Lab 11

Treatment plans

Reflection & Attributes

Плани лікування, автогенерація форм

Поняття

  • Attribute
  • AttributeUsage
  • Reflection
  • Type.GetProperties()
  • PropertyInfo
  • GetCustomAttributes()

[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
Файлів у проєкті 62
Типів C# 38
Lab 12

Persistence

File I/O

Журнал, імпорт, експорт, сесія

Поняття

  • File.WriteAllText
  • StreamWriter
  • StreamReader
  • File.AppendAllText
  • CSV parsing
  • try/catch з файлами

Кожна CRM і ERP-система має модуль імпорту/експорту CSV і текстові логи. Імпорт прайс-листів, вивантаження звітів у Excel, ротація лог-файлів — щоденна реальність backend-розробника.

Нові файли

  • + Utils/ClinicLogger.cs
  • + Utils/CsvExporter.cs
  • + Utils/CsvImporter.cs
  • + Utils/SessionManager.cs
Файлів у проєкті 66
Типів C# 40
Lab 13

Automation

Events & Delegates

Автоматичні реакції системи

Поняття

  • delegate
  • event
  • EventHandler<T>
  • EventArgs
  • subscriber pattern
  • += / -=

Паттерн event/delegate — основа WPF, WinForms і SignalR. У веб-застосунках події — це WebSocket-повідомлення реального часу: чати, біржові котирування, медичний моніторинг.

Нові файли

  • + Events/AppointmentEvents.cs
  • + Events/PatientEvents.cs
  • + Events/BillingEvents.cs
  • + Utils/PatientPassportWriter.cs
  • + Utils/SessionEventTracker.cs
Файлів у проєкті 71
Типів C# 44
Фаза 5

Запити та функції

LINQ і функціональний стиль перетворюють дані на звіти та аналітику.

Lab 14

Reports

LINQ

Звіти по спеціальностях, топ, місячна виручка

Поняття

  • LINQ
  • Where
  • Select
  • GroupBy
  • OrderBy
  • First/FirstOrDefault
  • Sum/Average
  • Any/All
  • Join

В Entity Framework запити Where, GroupBy, Join транслюються з LINQ у SQL автоматично. Те, що ви пишете тут, генерує реальні SQL-запити до PostgreSQL або MS SQL Server.

Нові файли

  • + Models/SpecialityReport.cs
  • + Managers/ReportManager.cs
Файлів у проєкті 73
Типів C# 46
Lab 15

Filters

Functional C#

Фільтри, процесор, пайплайн

Поняття

  • Func<T>
  • Action<T>
  • Predicate<T>
  • замикання
  • методи розширення
  • pipeline pattern
  • Aggregate

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
Файлів у проєкті 79
Типів C# 50
Фаза 6

UI та база даних

Справжній TUI-інтерфейс і SQL-база. Система стає повноцінним застосунком.

Lab 16

Console UI

Console UI

Повноцінний TUI: таблиці, дерево, BarChart

Поняття

  • Spectre.Console
  • Table
  • Panel
  • Tree
  • SelectionPrompt
  • BarChart
  • Markup

Spectre.Console використовується у реальних CLI-інструментах: dotnet CLI, Azure CLI, GitHub CLI. Навичка будувати TUI необхідна при розробці DevOps-скриптів і адміністративних утиліт.

Нові файли

  • + UI/ClinicRenderer.cs
Файлів у проєкті 80
Типів C# 51
Lab 17

EF Core

EF Core: основи

Підключення SQLite бази даних

Поняття

  • DbContext
  • DbSet<T>
  • Code-First
  • migrations
  • OnModelCreating
  • HasKey
  • seeding

DbContext і Code-First migrations — стандарт у .NET enterprise. Більшість стартапів і корпоративних систем використовують EF Core для роботи з PostgreSQL або SQL Server без написання SQL вручну.

Нові файли

  • + Data/ClinicDbContext.cs
  • + Data/DbSeeder.cs
Файлів у проєкті 82
Типів C# 53
Lab 18

EF Core

EF Core: зв'язки

Зв'язки між таблицями, Include

Поняття

  • navigation properties
  • Include
  • ThenInclude
  • HasOne
  • HasMany
  • WithMany
  • FK
  • TPH

Правильне завантаження зв'язків через Include — ключова різниця між запитом за 5 мс і зависанням сторінки на 10 секунд. Проблема N+1 запитів — одна з найчастіших причин деградації production-систем.

Нові файли

  • + Data/ClinicRepository.cs
Файлів у проєкті 83
Типів C# 54
Lab 19

EF Core

EF Core: Advanced

TPH, Owned Entity, оптимістична конкуренція

Поняття

  • OwnsOne
  • TPH discriminator
  • RowVersion
  • IsRowVersion
  • оптимістична конкуренція
  • DbUpdateConcurrencyException

RowVersion використовують банки і медичні системи, щоб два лікарі не перезаписали одночасно одного пацієнта. Оптимістична конкуренція — стандарт у будь-якій системі з одночасним доступом до даних.

Нові файли

  • + Models/EmergencyContact.cs
Файлів у проєкті 84
Типів C# 55
Lab 20

EF Core

EF Core: запити

IQueryable, пагінація, проекції, soft delete

Поняття

  • IQueryable<T>
  • AsNoTracking
  • Skip/Take
  • Select projection
  • DTO
  • HasQueryFilter
  • soft delete
  • IsDeleted

Кожен адмін-портал на .NET використовує пагінацію (Skip/Take) і проекції (Select DTO), щоб не тягнути зайві дані з БД. Soft delete — стандарт у regulated-системах, де дані не можна фізично видаляти.

Нові файли

  • + Data/ClinicQueryService.cs
  • + Models/PatientSummaryDto.cs
  • + Models/AppointmentSummaryDto.cs
Файлів у проєкті 86
Типів C# 57
Фаза 7

Архітектура

Async/await і SOLID+DI — фінальний рівень: код, готовий до production.

Lab 21

Async

Async / Await

Асинхронне меню, дашборд, HTTP клієнт

Поняття

  • async/await
  • Task<T>
  • Task.WhenAll
  • Task.WhenAny
  • CancellationToken
  • IProgress<T>
  • ConfigureAwait(false)
  • Parallel.ForEachAsync

ASP.NET Core обробляє тисячі запитів одночасно завдяки async. Без нього кожен HTTP-запит блокував би потік — сервер впав би під навантаженням уже при перших сотнях користувачів.

Нові файли

  • + Data/AsyncClinicService.cs
  • + Data/ClinicHttpClient.cs
  • + Models/ClinicDashboard.cs
Файлів у проєкті 89
Типів C# 60
Lab 22

Architecture

SOLID + DI

SOLID демо, DI-контейнер, патерни

Поняття

  • SRP
  • OCP
  • LSP
  • ISP
  • DIP
  • Strategy pattern
  • Decorator pattern
  • IServiceCollection
  • AddSingleton/Scoped/Transient
  • primary constructor

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
Файлів у проєкті 96
Типів C# 66
Розроблено Tomka Yurii · © 2026 ·