// the find
rafaelfgx/Architecture
.NET 10, Angular 21, Clean Architecture, Clean Code, SOLID, KISS, DRY, Mediator Pattern, Folder-by-Feature Structure
A reference implementation / starter template showing Clean Architecture with .NET 10 and Angular, using mediator pattern, folder-by-feature structure, and EF Core with SQL Server. Aimed at developers who want a concrete starting point for a full-stack .NET/Angular app with opinionated layering decisions already made. The domain is intentionally trivial (User/Example CRUD) so the architecture is the actual product.
- Folder-by-feature structure in the Application layer is genuinely good - each operation (AddUser, DeleteUser, etc.) gets its own folder with Request/Validator/Handler/Response, making navigation and ownership obvious rather than scattering files by type across the codebase.
- Docker Compose support is included and the setup instructions are concise and accurate - you can be running the whole stack in a single command without needing local SQL Server or Node tooling.
- Controllers are kept intentionally thin (only mediator dependency), which enforces the pattern correctly rather than showing it in comments while violating it in practice.
- The project uses Directory.Build.props and Directory.Packages.props for centralized dependency management, which is a real practical benefit that a lot of reference projects skip.
- No unit or integration tests exist in the repository at all, which is a significant gap for something that repeatedly claims 'simplicity of unit testing' as a benefit - showing would be far more useful than telling.
- The domain layer is almost empty - User.cs and Example.cs with a few properties. There's no demonstration of aggregate boundaries, invariant enforcement, or domain events, so the 'Clean Architecture with rich domain' premise is largely hypothetical in this codebase.
- SQL Server is the only database option and it's hardcoded as a requirement, making the setup heavier than necessary for a learning/reference project; there's no SQLite fallback or in-memory option for quick evaluation.
- The separation between Application Handlers and Domain Services is blurry at this scale - because the domain is anemic, all real logic ends up in handlers, which makes the layering look like ceremony rather than solving an actual complexity problem.