Skip to content
/ todo Public
forked from ivanpaulovich/todo

✅ Commad-Line Task management with storage on your GitHub 🔥

License

Notifications You must be signed in to change notification settings

Amoenus/todo

Repository files navigation

🌀 Clean Architecture Implementation Sample with .NET Core

Play with Docker Build status Docker Cloud Automated Build

After reading the great books from Robert C. Martin and watching his talks on youtube I was challenged to implement a Clean Architecture sample. To acomplish this goal, I selected the simple domain of a Todo List app then I started to design the solution following the principles found in the the book. If you share the same interest you are on the right place.

Use Cases

The application is designed around the uses cases of a Todo List app. The user can do the following:

  • Add a todo item.
  • List the todo items.
  • Update the todo item titles.
  • Complete a todo item.

Project Organisation

The solution is divided between Production Code and Unit Tests. For the Production Code I created the following four layers:

  • The Core project with Use Cases, Entities and Boundary Objects.
  • The Infrastructure with the Data Access implementation.
  • The Console App as the initial delivery mechanism.
  • The Web API as the second delivery mechanism I implemented.

On the Unit Tests you will code to ensure the use cases business.

Implementation Guide

Soon.

The Dependency Rule

Soon.

Entities

Soon.

Use Cases

Soon.

Frameworks and Drivers

Soon.

User Interface

Soon.

Presenter Objects

Soon.

The Stable Dependencies Principle

Soon.

The Stable Abstractions Principle

Soon.

⚡ Running

You can run the application uses cases from the Tests, Console or from the Web API. We are continuously delivering the Todo List Swagger Demo on Google Cloud.

Unit Tests

dotnet test tests/TodoList.UnitTests/TodoList.UnitTests.csproj

Console Demo (InMemory Persistence)

dotnet run --project "source/TodoList.ConsoleApp/TodoList.ConsoleApp.csproj"

Usage:
        add [title]
        finish [id]
        list
        update [id] [title]
        exit

Web API (InMemory Persistence)

dotnet run --project "source/TodoList.WebApi/TodoList.WebApi.csproj"

Web API (SQL Server Persistence)

When you change the environment to Production then the StartupProduction class will be instantiated which uses the SQL Server persistence.

dotnet run --project --environment="production" "source/TodoList.WebApi/TodoList.WebApi.csproj"

Then navigate to https://localhost:5001/.

💾 Setup SQL Server (Optional)

Setup SQL Server in Docker

Run scripts/sql-docker-up.sh to setup a SQL Server in a Docker container with the following Connection String:

Server=localhost;User Id=sa;Password=<YourNewStrong!Passw0rd>;

Add Migration

Run the EF Tool to add a migration to the TodoList.Infrastructure project.

dotnet ef migrations add "InitialCreate" -o "EntityFrameworkDataAccess/Migrations" --project source/TodoList.Infrastructure --startup-project source/TodoList.WebApi

Update the Database

Generate tables and seed the database via Entity Framework Tool:

dotnet ef database update --project source/TodoList.Infrastructure --startup-project source/TodoList.WebApi

🏁 Development Environment

☎️ Support and Issues

I am happy to answer issues. Give a ⭐ if you like the project.

About

✅ Commad-Line Task management with storage on your GitHub 🔥

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 99.1%
  • Other 0.9%