-
-
Notifications
You must be signed in to change notification settings - Fork 689
Separation of Concerns
The package that contains the High Level Modules
which describe the Domain via Aggregate Roots, Entities and Value Objects. By design this project is Highly Abstract
and Stable
, in other terms this package contains a considerable amount of interfaces and should not depend on external libraries and frameworks. Ideally it should be loosely coupled even to the .NET Framework.
A project that contains the Application Use Cases which orchestrate the high level business rules. By design the orchestration will depend on abstractions of external services (eg. Repositories). The package exposes Boundaries Interfaces (in other terms Contracts or Ports
) which are used by the user interface.
The infrastructure layer is responsible to implement the Adapters
to the Secondary Actors
. For instance an SQL Server Database is a secondary actor which is affected by the application use cases, all the implementation and dependencies required to consume the SQL Server is created on infrastructure. By design the infrastructure depends on application layer.
Responsible for rendering the Graphical User Interface (GUI) to interact with the User or other systems. Made of Controllers which receive HTTP Requests and Presenters which converts the application outputs into ViewModels that are rendered as HTTP Responses. On ASP.NET it is the application entry-point, in our case the application entry-point knows the DI Container and all dependencies.
- Value Object
- Entity
- Aggregate Root
- Repository
- Use Case
- Bounded Context
- Entity Factory
- Domain Service
- Application Service
- Single Responsibility Principle
- Open-Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
- Swagger and API Versioning
- Microsoft Extensions
- Feature Flags
- Logging
- Data Annotations
- Authentication
- Authorization