TaskoMask
TaskoMask copied to clipboard
Task management system based on .NET 8 with Microservices, DDD, CQRS, Event Sourcing and Testing Concepts
What is TaskoMask?
TaskoMask is a free and open-source task management system based on .Net. This project is online, and everyone can use it as a team member or project owner. But the primary goal of this project is to be an effort to show how we can implement software technologies and patterns by .Net, so this can be used by developers who are looking for a real example project with real challenges. Please take a look at its wiki!
Try it online:
Website
- User Panel
- Admin Panel
- API
Documentation
Design
Work is in progress
-
Onion Architecture
-
Monolithic Architecture
click for details
- Architecture was Monolithic until this last commit
-
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 : MagicOnion - gRPC
- 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
-
Event Sourcing
-
Unit of Work
-
Repository
-
Notification
Implementation
-
Back-end:
click for details
- .Net 6
- C#
- ASP.NET Web API
- ASP.NET MVC
- MongoDB
- Redis
- 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
- 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 (last commit)
- Cookie Authentication without ASP.NET Identity
- 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 (last commit)
- .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 feature requests 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 question.
Change logs
-
Aug, 2022
- [x] Migrate from Monolith to Microservices
-
July, 2022
- [x] Convert UserPanel from Blazor Server to Blazor WebAssembly
- [x] Complete the functionalities for single user usage
-
Apr, 2022
- [x] Implement Unit Tests
- [x] Implement Integration Tests
- [x] Implement Acceptance Tests
- [x] Implement API Tests
- [x] Implement UI Tests
-
Jan, 2022
- [x] Full refactor Domain model with DDD concepts
- [x] Separate Domain Model and Data Model
- [x] Separate Read Side and Write Side Database
-
Dec, 2021
- [x] Upgrade to .NET 6
-
Nov, 2021
- [x] Convert user panel from ASP.NET MVC to Blazor Server
-
Oct, 2021
- [x] Implement admin panel with ASP.NET MVC
- [x] Implement administration subdomain
-
Aug, 2021
- [x] Remove Asp.net Identity
- [x] Add cookie authentication
- [x] Add JWT authorization
- [x] Implement API with ASP.NET Web API
-
Jul, 2021
- [x] Full refactore
-
Nov, 2020
- [x] Upgrad from net 3.1 to net 5
- [x] Implement user panel with ASP.NET MVC
-
Oct, 2020
- [x] Implement Website with ASP.NET MVC
- [x] Implement Anemic Domain Model
- [x] Create Repository