# Domain > subject area in which we build an application > We have some core domains and some sub domains > Working out all domains is an iterative process Bounded Context -> Each subdomain has its own bounded context so that they can each have their own "language" Context Map -> outlines which domains communicate with each other and how Anti-Corruption Level Tactical Design Domain Objects -> 1. Entity Objects 2. Value Objects ![[Pasted image 20250306182113.png]] ![[Pasted image 20250306182209.png]] ![[Pasted image 20250306182246.png]] ![[Pasted image 20250306182324.png]] ## **Solution Name: MyApp (or your project name)** πŸ“‚ **MyApp.sln** (Solution file) ### **1. Presentation Layer** (πŸ“‚ `MyApp.WebAPI`) - **Purpose:** Exposes the application via a web API. πŸ“‚ `MyApp.WebAPI` - πŸ“‚ **Controllers** – Defines API endpoints. - πŸ“‚ **Middlewares** – Implements custom middleware (logging, exception handling). ### Dependencies: > Projects: ApplicationProject, DomainProject > Packages: AutoMapper, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Newtonsoft.Json --- ### **2. Application Layer** (πŸ“‚ `MyApp.Application`) - **Purpose:** Contains the application logic, use cases, and service abstractions. πŸ“‚ `MyApp.Application` - πŸ“‚ **Interfaces** – Defines services like `IUserService`, `IOrderService`, etc. - πŸ“‚ **Services** – Defines services like `IUserService`, `IOrderService`, etc. - πŸ“‚ **DTOs** – Data Transfer Objects for input/output models. - πŸ“‚ **Mappers** – Maps domain models to DTOs (using AutoMapper or manual mapping). - πŸ“‚ **Validators** – Contains validation rules using FluentValidation. >- πŸ“‚ **Queries** – Handles read operations (CQRS pattern). >- πŸ“‚ **Commands** – Handles write operations (CQRS pattern). >- πŸ“‚ **Exceptions** – Defines application-layer exceptions. >- πŸ“‚ **UseCases** – Implements application logic (e.g., `CreateOrderHandler`). ### Dependencies: >Projects: DomainProjec >Packages: AutoMapper, Microsoft.Extensions.DependencyInjection --- ### **3. Core Domain Layer** (πŸ“‚ `MyApp.Domain`) - **Purpose:** Represents the core business logic and entities without dependencies on infrastructure or frameworks. πŸ“‚ `MyApp.Domain` - πŸ“‚ **Aggregates** – Groups related entities following DDD principles. - πŸ“‚ **Framework** - **Interfaces** – Contains domain-level abstractions like repository interfaces and entity interface. - πŸ“‚ **Framework** - **Interfaces** – **Repositories** - πŸ“‚ **Framework** - **Base** - πŸ“‚ **Enums** – Defines domain-specific enumerations. - πŸ“‚ **Factories** >- πŸ“‚ **ValueObjects** – Defines immutable objects that don’t have an identity. >- πŸ“‚ **Exceptions** – Custom exceptions related to domain logic. >- πŸ“‚ **Specifications** – Encapsulates domain rules and query logic. ### Dependencies: >Packages: Microsoft.Extensions.DependencyInjection --- ### **4. Infrastructure Layer** (πŸ“‚ `MyApp.Infrastructure`) - **Purpose:** Implements external dependencies such as databases, logging, APIs, and caching. πŸ“‚ `MyApp.Infrastructure` - πŸ“‚ **Framework** - **Base** – Implements `IRepository` for data access. - πŸ“‚ **Configurations** – Stores EF Core entity configurations. - πŸ“‚ **Services** - Repositories - πŸ“‚ **Migrations** - Auto Created - **DB-Context** >- πŸ“‚ **Persistence** – Implements repositories and EF Core DbContext. >- πŸ“‚ **Logging** – Implements logging strategies (e.g., Serilog, NLog). >- πŸ“‚ **Identity** – Manages authentication and authorization. >- πŸ“‚ **Caching** – Implements caching strategies (Redis, MemoryCache). >- πŸ“‚ **Email** – Handles email services (SMTP, SendGrid). >- πŸ“‚ **ExternalServices** – Integrations with third-party APIs. ### Dependencies: >Projects: DomainProjec >Packages: Microsoft.EntityFrameworkCore.SqlServer --- ### **Additional Projects (Optional)** - πŸ“‚ `MyApp.Tests` – Unit and integration tests. - πŸ“‚ `MyApp.Shared` – Shared utilities (cross-cutting concerns like constants, helpers). Check the structure and git and stuff