What is TaskoMask?
TaskoMask is a free and open-source task management system based on .Net. The primary goal of this project is to be an effort to show how we can design and develop a real software product based on advanced concepts like DDD, TDD, BDD, Microservices, etc. Where the experience of using them in a real product is mostly hidden behind software companies. Please take a look at its wiki!
Try it online:
Website
- User Panel
- API
Documentation
- Domain Documentation
- Architecture Documentation
- API Documentation
- User Guide Documentation
- Run with Docker Compose
Plan and Progress
All information presented after this section are the final goal and our big picture. Maybe at this time some of them are not ready yet. To see the plan and progress, please take a look at the following items:
Design
π΄Work is in progress
-
Onion Architecture
click for details
- It was Onion Architecture before refactoring (browse the codes here)
-
Clean Architecture
-
Vertical Slice Architecture
-
Feature Folder Structure
-
Monolithic Architecture
click for details
- It was Monolithic Architecture before refactoring (browse the codes here)
-
Microservices Architecture
click for details
- Strangler application pattern
- Decompose by subdomain
- Database per service
- Saga
- API Composition
- Docker
- Docker-Compose
- Kubernetes
- Messaging : MassTransit (RabbitMQ)
- Remote Procedure Call : Grpc.AspNetCore
- Idempotent Consumer
- API Gateway : Ocelot
- Backend for front-end
- Service discovery : Kubernetes - Consul
- Circuit Breaker : Polly
- Log aggregation : Serilog - Seq
- Application metrics : Opentelemetry-dotnet - Prometheus
- Distributed tracing : Opentelemetry-dotnet - Jaeger
- Health check API : AspNetCore.HealthChecks
- IDP : DuendeSoftware IdentityServer
-
Testing (TDD & BDD)
click for details
- Unit Testing : xUnit, FluenAssertion, NSubstitute
- Integration Testing
- API Testing
- UI Testing: Selenium
- Acceptance Testing : Gherkin, SpecFlow
- Screenplay Pattern : Suzianna
- Well written tests organized in :
- Object Mother Pattern
- Test Data Builder
- Test Hooks
- Test Doubles
- Dummy
- Stub
- Mock
- Teardown
- Fixture Management
- Verification
-
DDD
click for details
- Rich Domain Model (for core domain)
- Anemic Domain Model (for less important subdomains)
- Aggregate
- Value Object
- Domain Event
- Domain Service
- Always Valid Domain Model
- Invariants
- Specification
- Factory Method
- Optimistic Concurrency
- Separate Domain Model and Data Model
-
CQRS
click for details
- Separate Read and Write Model
- Separate Read Side DB and Write Side DB
-
Use Case Driven Development
-
Event Sourcing
-
Unit of Work
-
Repository
-
Notification
Implementation
-
Back-end:
click for details
- .Net 6
- C#
- ASP.NET Web API
- ASP.NET MVC
- ASP.NET Identity
- MongoDB
- Redis
- Ocelot : .NET core API Gateway
- DuendeSoftware IdentityServer : OpenID Connect and OAuth 2.x framework for ASP.NET Core
- MassTransit : a framework on top of message transports such as RabbitMQ
- xUnit : testing framework
- FluenAssertion : write fluent assertions
- NSubstitute : to make test double (Mock, stub, fake, spy)
- Gherkin : use native language to describe test cases
- SpecFlow : turns Gherkin scenarios into automated tests
- Suzianna : writing acceptance tests, using Screenplay Pattern
- Selenium : supporting browser automation
- MediatR : simple mediator implementation
- Grpc.AspNetCore : gRPC library for ASP.NET Core
- AutoMapper : an object-object mapper
- FluentValidation : building strongly-typed validation rules
- Swagger : expose Swagger JSON endpoints from APIs
- Serilog : provides diagnostic logging
- AspNetCore.HealthChecks : ASP.NET Core Health Check
- MvcPagedList.Core : easily paging in ASP.NET Core MVC
- EasyCaching : caching library
-
Front-end:
click for details
- Blazor
- Blazor Server
- Cookie Authentication without ASP.NET Identity
- It was Blazor Server befor refactoring it to WebAssembly (browse the codes here)
- Blazor WebAssembly (standalone)
- JWT Authentication
- Comunication between components
- Local Storage
- Consume REST API
- Retry using HttpClientRetryHelper
- Handle Drag and Drop
- Using Modal, Toast, etc.
- Blazor Server
- .HTML
- CSS
- JavaScript
- JQuery
- Bootstrap
- Jquery.noty
- Chart.js
- Blazor
-
Some other Features:
click for details
- Caching Behavior using Pipeline Pattern
- Validation Behavior using Pipeline Pattern (Check both Fluent Validation and Data Annotation Validation)
- Event Storing Behavior using Pipeline Pattern
- Exception Handling
- Cookie Authentication
- JWT Authentication
- Role Permission Base User Management without ASP.NET Identity
- Swagger UI with JWT Support
Contributing
Contributions, issues, and questions are welcome. Any contributions you make are greatly appreciated.
Please see the Contribution Guide and follow the instructions to be a part of this project.
This project exists thanks to all the people who contribute.
Articles And Tutorials
- Real-world open-source project based on .NET 6 with DDD, ES, CQRS concepts
- How to Blazor articles
- Learning By Doing (podcats)
Supporting
We work hard to make something useful for .NET community, so please give a star β if this project helped you! We need your support by giving a star or contributing or sharing this project with anyone who can benefit from it.
Author & License
This project is developed by Hamed Shirbandi under MIT licensed. Find Hamed around the web and feel free to ask your questions.
Change logs
2023
-
Feb, 2023
- Simplify Write Service Architecture
- Implement Unit Tests for Task Services
- Implement Integration Tests for Task Services
-
Jan, 2023
- Extract Task Write Service
- Extract Task Read Service
- Remove Monolith Service
- Simplify Write Service Architecture
2022
-
Dec, 2022
- Extract Board Write Service
- Extract Board Read Service
- Implement Integration Tests for Board Services
- Implement Unit Tests for Board Services
- Handle RPC requests by gRPC
- Extract API Gateway Aggregator
- Complete API Gateway Configs by Ocelot
-
Nov, 2022
- Implement Unit Tests for Owner Services
- Implement Integration Tests for Owner Services
-
Oct, 2022
- Extract Owner Write Service
- Extract Owner Read Service
- Handle Messaging by RabbitMQ
-
Sep, 2022
- Extract Identity Service
- Add IdentityServer as IDP
- Add ASP.NET Identity
- Add User Panel API Gateway
- Refactor to Clean Architecture
- Follow Vertical Slice Architecture
- Follow Use Case Driven Development
-
Aug, 2022
- Migrate from Monolith to Microservices
-
July, 2022
- Convert UserPanel from Blazor Server to Blazor WebAssembly
- Complete the functionalities for single user usage
-
Apr, 2022
- Implement Unit Tests
- Implement Integration Tests
- Implement Acceptance Tests
- Implement API Tests
- Implement UI Tests
-
Jan, 2022
- Full refactor Domain model with DDD concepts
- Separate Domain Model and Data Model
- Separate Read Side and Write Side Database
2021
-
Dec, 2021
- Upgrade to .NET 6
-
Nov, 2021
- Convert user panel from ASP.NET MVC to Blazor Server
-
Oct, 2021
- Implement admin panel with ASP.NET MVC
- Implement administration subdomain
-
Aug, 2021
- Remove Asp.net Identity
- Add cookie authentication
- Add JWT authorization
- Implement API with ASP.NET Web API
-
Jul, 2021
- Full refactore
2020
-
Nov, 2020
- Upgrad from net 3.1 to net 5
- Implement user panel with ASP.NET MVC
-
Oct, 2020
- Implement Website with ASP.NET MVC
- Implement Anemic Domain Model
- Create Repository