- CQRS - based approach (https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs):
- We support Single Responsibility principle: we create separate classes for every command / query allow to use ServerLess Architecture
- Open API / Swagger: provides real and transparent documentation and allows to generate client application
- OAuth 2 Integration (based on Identity Server)
- Transaction support out of the box
- Client / Server Logging
- DevOps automation
- Row-Level Security Level
- Reach permissions schema
- Server Validation rules based on Fluent Validation API
- TDD-approach (xUnit/nUnit)
- UI-auto testing (using Selenium), integration testing
This will contain all entities, enums, exceptions, interfaces, types and logic specific to the domain layer.
This layer contains all application logic. It is dependent on the domain layer, but has no dependencies on any other layer or project. This layer defines interfaces that are implemented by outside layers. For example, if the application needs to access a notification service, a new interface would be added to application and an implementation would be created within infrastructure.
This layer contains classes for accessing external resources such as file systems, web services, smtp, and so on. These classes should be based on interfaces defined within the application layer.
Web UI Layer (Frontend)
This layer contains frontend representation of our PWA.
Our frontend level using monorepo and store patterns , so a single git repository that holds the source code for multiple applications and libraries, along with the tooling for them.
Our technical stack
C#, .Net Core (.Net 5), EF, Dapper, MS SQL (Azure SQL), CQRS/MediatR, ClickHouse, Redis, TypeScript, Angular 12, Nx, NGRX, Docker