Materialele de laborator pentru cursul de Proiectarea Sistemelor Software Complexe (PSSC). Exemplele urmăresc publicarea notelor unui examen; temele de laborator urmăresc coșul de cumpărături al unui magazin virtual. Ambele domenii sunt modelate în stil Domain-Driven Design funcțional, după cartea lui Scott Wlaschin, Domain Modeling Made Functional.
- .NET 10 SDK — versiunea exactă e fixată în global.json; verificați cu
dotnet --version. - Un IDE: Visual Studio 2026, JetBrains Rider 2025.3+ sau VS Code + C# Dev Kit.
- Docker Desktop (opțional) — necesar pentru rularea locală a Lucrărilor 4-8 (SQL Server și emulatorul Azure Service Bus); vedeți compose.yaml.
- GitHub Copilot sau un asistent AI echivalent (ChatGPT, Claude) — pentru Lucrarea 9.
Exemplele folosesc C# 14 (membri de extensie extension(...), cuvântul cheie field) și nu compilează cu SDK-uri mai vechi. Fișierul global.json fixează SDK-ul folosit de dotnet la rădăcina depozitului. Dacă build-ul raportează o versiune de limbaj nesuportată (de exemplu CS9260, CS8652) sau NETSDK1045, instalați .NET 10 de la dotnet.microsoft.com.
| # | Lucrare | Concepte | Cod |
|---|---|---|---|
| 1 | Mediul de lucru și aplicații consolă | record, switch expressions, with |
— |
| 2 | Sistem de tipuri DDD | obiecte-valoare, stări închise, Result |
Lucrarea-02/Exemple/Examples.slnx |
| 3 | Workflow DDD | operații pure, compunere, evenimente și erori, teste | Lucrarea-03/Exemple/Examples.slnx |
| 4 | Introducere în EF Core | DbContext, DbSet, mapare SQL-first |
Lucrarea-04/Exemple/Examples.slnx · SQL/create-db.sql |
| 5 | Persistență cu EF Core | repository-uri, I/O la marginile workflow-ului | Lucrarea-05/Exemple/Examples.slnx · SQL/create-db.sql |
| 6 | API Web | ASP.NET Core, API minimal, OpenAPI | Lucrarea-06/Exemple/Examples.slnx |
| 7 | Comunicare sincronă | HttpClient tipizat, reziliență, contracte partajate |
Lucrarea-07/Exemple/Examples.slnx |
| 8 | Comunicare asincronă | evenimente, Azure Service Bus, worker | Lucrarea-08/Exemple/Examples.slnx |
| 9 | Proiectare asistată de AI | Event Storming, GitHub Copilot | referință: Lucrarea 3 |
| — | Proiect | proiectul de semestru | — |
Fiecare Lucrarea-NN/README.md descrie tema și cerințele, iar Lucrarea-NN/Exemple/ conține o soluție exemplu (Examples.slnx) care ilustrează conceptele. Proiectele Examples.Functional, Examples.Domain, Examples.Domain.Tests, Examples.Data și SQL/create-db.sql sunt identice în Lucrările 3-8, iar SQL/create-db.sql și fișierele Exemple/Directory.* sunt partajate și cu Lucrarea 4 (verificat automat de tools/Check-LabConsistency.ps1); o corecție într-unul dintre ele se propagă cu pwsh tools/Sync-Labs.ps1 -Source 08 -Target "07","06","05","04","03". Dacă lucrați dintr-o copie a unui singur laborator, copiați și fișierele din rădăcina depozitului (global.json, .editorconfig, NuGet.config) — fără ele, dotnet build nu găsește versiunile pachetelor NuGet.
Fiecare laborator cu cod are în Lucrarea-NN/docs/adr/ un Architecture Decision Record (ADR) cu decizia pe care o adaugă față de laboratorul anterior, alternativele respinse și consecințele lor. Excepție face Lucrarea 4, o introducere în EF Core fără model de domeniu; deciziile de persistență sunt documentate în ADR-0003 (Lucrarea 5). Lanțul se citește ca istoricul arhitecturii exemplului: ADR-0001 sistemul de tipuri → ADR-0002 operații și workflow → ADR-0003 persistență → ADR-0004 API Web → ADR-0005 comunicare sincronă / ADR-0006 comunicare asincronă.
[1] Scott Wlaschin, Domain Modeling Made Functional, Pragmatic Bookshelf, 2018