Skip to content

Commit 53b6955

Browse files
committed
Update README.md
1 parent 3a34704 commit 53b6955

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

README.md

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AdvancedTodoList
2-
**AdvancedTodoList**, developed as my personal project, is a Web API for managing to-do lists in teams, where each member can have a role and different sets of permissions. It's based on ASP.NET Core and Entity Framework Core with SQL Server running on Docker.
2+
**AdvancedTodoList**, developed as my personal project, is a Web API for managing tasks in team settings, where each member can have a role and different sets of permissions. It's based on ASP.NET Core and Entity Framework Core with SQL Server running on Docker.
33

44
## Technologies and tools used
55
* .NET 8.0
@@ -11,6 +11,7 @@
1111
* SharpGrip.FluentValidation.AutoValidation
1212

1313
## Features
14+
1415
* **Collaborative to-do list management**: The API allows users to add new tasks (`TodoListItem`) to their to-do lists, update task details, mark tasks as completed/skipped, or delete them when they're no longer needed.
1516
* **Invitation links**: Users can create invitation links for their to-do lists to allow other users to join them.
1617
* **Search and Filtering**: Most endpoints allow users to specify filtering criteria and search prompts.
@@ -20,29 +21,48 @@
2021
* **Integration testing**: Integration tests utilize `Testcontainers` for comprehensive testing of API functionality and interactions.
2122

2223
## Architecture Overview
23-
The Advanced Todo List application follows a clean architecture. The main three layers are:
24+
This project follows a pragmatic, clean-architecture inspired layout that balances separation of concerns with developer productivity. The solution preserves clear layer responsibilities and interfaces while choosing to use EF Core directly where it simplifies the codebase.
2425

2526
### Core Layer (`AdvancedTodoList.Core`)
26-
* Contains services and repositories interfaces.
27+
28+
A layer that defines the application's domain and data access contracts.
29+
30+
* Contains data access services interfaces (e.g. repositories).
2731
* Defines the entities and value objects representing the domain model.
28-
* Provides services for CRUD operations, task management, user authentication, authorization, etc.
2932
* Defines specifications to query and filter parameters.
33+
34+
### Application Layer (`AdvancedTodoList.Application`)
35+
36+
The business logic layer that depends on the Core.
37+
38+
* Provides services for business logic such as CRUD operations, task management, user authentication, authorization, etc.
3039
* Implements validation logic using FluentValidation for ensuring data integrity and consistency.
40+
* Contains data transfer objects and application options.
3141

3242
### Infrastructure Layer (`AdvancedTodoList.Infrastructure`)
43+
44+
Handles the direct EF Core data access. Depends on the Core.
45+
3346
* Handles data access and infrastructure-related concerns.
3447
* Implements repositories and data access logic using Entity Framework Core.
3548
* Manages database context and configuration.
36-
* Handles JWT and refresh tokens.
37-
* Implements services and specifications.
3849

39-
### Application Layer (`AdvancedTodoList`)
50+
### Presentation Layer (`AdvancedTodoList.WebApi`)
51+
52+
A layer that enables HTTP methods. Directly depends on the Core (filter and pagination parameters) and Application (service interfaces) layers. Indirectly depends on the Infrastructure, but only for mapping services to the interfaces for Dependency Injection.
53+
4054
* Implements RESTful API endpoints using ASP.NET Core Web API.
41-
* Handles incoming HTTP requests, validates input data, and delegates to services for business logic execution.
55+
* Handles incoming HTTP requests, validates input data (using middleware), and delegates to services for business logic execution.
4256
* Uses authentication and authorization mechanisms to secure endpoints.
4357
* Facilitates error handling and response formatting.
4458
* Exposes Swagger documentation.
4559

60+
## Design Choices Justifications
61+
62+
* Use of EF Core in the domain layer - despite being a clean-architecture violation, this choice significantly reduces mapping boilerplate and makes many queries simpler and more expressive by leveraging EF Core/LINQ directly against the model. It is justified here because the project commits to a single, stable data provider that is unlikely to change.
63+
* Repository and Unit of Work implementations over `DbContext` - repository + UoW provide clear, testable contracts and centralize common data operations (pagination, specification application, common query helpers), which reduces duplication and keeps transactional boundaries explicit.
64+
* Creating interfaces for services that have only one implementation - primarily improves testability (easy mocking/faking) and decouples callers from concrete implementations, which helps when composing dependencies in DI.
65+
4666
## Testing Approach
4767
The `AdvancedTodoList` application uses two types of automated tests: unit tests and integration tests.
4868

0 commit comments

Comments
 (0)