Created
December 19, 2025 08:00
-
-
Save sunmeat/3cef2480888b4197757e69ed8f944b4a to your computer and use it in GitHub Desktop.
3-рівнева архітектура
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ────────────────────────────────────────────────────────────────────────────────────── | |
| 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