Awesome
<p align="center"> <img src="docs/assets/pipelines_purple.svg#gh-light-mode-only" alt="Pipelines"/> <img src="docs/assets/pipelines_white.svg#gh-dark-mode-only" alt="Pipelines"/> </p>
📢 What is Pipelines?
We believe that a good library should adapt to the application, not the other way. That is why Pipelines grants you the freedom to create any number of mediators within your application. Each of them can be tailored to specific use cases, ensuring maximum flexibility in programming. This is possible because:
- Pipelines does not expose its types - it does not require implementing an interface or inheriting from a class. You have absolute control over input data and operation results.
- Each mediator built with Pipelines is independent and decoupled from the others.
- To maintain the best performance, we utilized the Source Generator mechanism, which minimizes the use of reflection.
- Decorator support allows you to add additional effects like validation, logging, or even using the Unit of Work pattern. Additionally, it enables the construction of the Chain of Responsibility pattern.
📦 Installation
dotnet add package DumplingsDevs.Pipelines
dotnet add package DumplingsDevs.Pipelines.WrapperDispatcherGenerator
📚 Documentation
The Quick Start section will allow you to quickly create your first Pipeline.
If you prefer learning through real examples, please check out the examples below:
If you want to learn more, please read the articles below.
- Main Concepts
- Configuration
- Pipeline Cookbook
- Troubleshooting
- Proxy vs Generated Dispatcher
- Benchmarks
- ADR
- Articles
⚠️ Limitations
- Pipelines in which multiple handlers will be handled for one input must have a
Task
orvoid
return type. - Cannot create a Pipeline that returns both generic and non-generic types.
🛤 Roadmap
- ADR Documentation: Record key architectural decisions made during implementation using ADRs.
- Code Cleanup: Refine and tidy up the codebase post-MVP, paving the way for new feature development.
- Support for Nullable Results: Add functionality to handle nullable result types.
- Multiple Inputs in Dispatcher: Enhance the dispatcher handle method to accept a list of inputs instead of just one.
- Parallel Pipeline: Introduce a pipeline to facilitate parallel execution of multiple handlers.
- Stream Pipeline: Implement support for streaming pipelines.
- Decorator Performance Optimization: Improve performance, especially concerning the use of
ActivatorUtilities.CreateInstance()
.
🥟💡 The Dumplings Behind the Magic
Hey there! We're Dumplings Devs, made up of <a href="https://pl.linkedin.com/in/matwroblewski">Mateusz Wróblewski</a> and <a href="https://pl.linkedin.com/in/kamil-bytner">Kamil Bytner</a>. We're passionate about software and always up for a coding challenge.
<p align="center"> <img src="docs/assets/dumplings_purple.svg#gh-light-mode-only" alt="DumplingsDevs"/> <img src="docs/assets/dumplings_white.svg#gh-dark-mode-only" alt="DumplingsDevs"/> </p>