finds.dev← search

// the find

rafaelfgx/Architecture

★ 3,267 · C# · MIT · updated May 2026

.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.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →