Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created December 19, 2025 08:00
Show Gist options
  • Select an option

  • Save sunmeat/3cef2480888b4197757e69ed8f944b4a to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/3cef2480888b4197757e69ed8f944b4a to your computer and use it in GitHub Desktop.
3-рівнева архітектура
──────────────────────────────────────────────────────────────────────────────────────
Presentation Layer (Рівень подання — те, що бачить і з чим взаємодіє користувач)
├── Контролери (Controllers)
├── Подання (Views / .cshtml файли)
├── ViewModels (моделі, які використовуються тільки у поданнях і контролерах)
├── DTO, які приходять від користувача (наприклад, з форм або JSON-запитів)
├── wwwroot (CSS, JavaScript, зображення)
├── Tag Helpers
├── Клієнтська валідація (JavaScript)
├── HttpContext (доступ до User, Session, Request, Response)
├── Middleware (якщо є кастомні)
└── Program.cs (налаштування додатка, реєстрація сервісів у DI)
Цей шар не знає нічого про базу даних і не працює з нею напряму.
Контролер лише викликає сервіси бізнес-логіки.
──────────────────────────────────────────────────────────────────────────────────────
Business Layer (Рівень бізнес-логіки — «мозок» додатка)
├── Сервіси (наприклад, ArtistService, SongService)
├── Інтерфейси сервісів (IArtistService, ISongService)
├── DTO для передачі даних між шарами (наприклад, ArtistCreateDto, ArtistDetailsDto)
├── Мапери (перетворення Entity ↔ DTO)
├── Бізнес-правила та складна валідація
├── Авторизація та перевірка прав доступу
├── Обчислення, трансакції (якщо потрібні)
└── Логіка кешування (якщо є)
Сервіс отримує дані від рівня доступу до даних, обробляє їх за правилами бізнесу і повертає результат у вигляді DTO контролеру.
Цей шар не знає, як саме зберігаються дані (EF Core, SQL-запити тощо) — він працює тільки через інтерфейси репозиторіїв.
──────────────────────────────────────────────────────────────────────────────────────
Data Access Layer (Рівень доступу до даних — робота з базою)
├── Доменні моделі / Entities (Artist, Album, Song — класи, які відповідають таблицям БД)
├── DbContext (MusicPortalDbContext)
├── Репозиторії (ArtistRepository, SongRepository)
├── Інтерфейси репозиторіїв (IArtistRepository, ISongRepository)
├── Unit of Work (якщо використовується)
├── Міграції EF Core
└── Конфігурація моделі (анотації або OnModelCreating)
Цей шар відповідає тільки за читання/запис даних у базу.
Він не знає нічого про контролери, подання чи бізнес-правила.
──────────────────────────────────────────────────────────────────────────────────────
База даних (зовні додатка — SQL Server, Oracle, MySQL тощо)
──────────────────────────────────────────────────────────────────────────────────────
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment