PatternKit.Core
0.8.1
See the version list below for details.
dotnet add package PatternKit.Core --version 0.8.1
NuGet\Install-Package PatternKit.Core -Version 0.8.1
<PackageReference Include="PatternKit.Core" Version="0.8.1" />
<PackageVersion Include="PatternKit.Core" Version="0.8.1" />
<PackageReference Include="PatternKit.Core" />
paket add PatternKit.Core --version 0.8.1
#r "nuget: PatternKit.Core, 0.8.1"
#:package PatternKit.Core@0.8.1
#addin nuget:?package=PatternKit.Core&version=0.8.1
#tool nuget:?package=PatternKit.Core&version=0.8.1
PatternKit
Fluent Design Patterns for Modern .NET
Elegant, declarative, allocation-light implementations of classic patterns—optimized for .NET 9.
✨ Overview
PatternKit is a modern library that reimagines the GoF design patterns for .NET 9+.
Instead of boilerplate-heavy class hierarchies, we favor:
- Fluent builders and DSLs (chainable, declarative, composable).
- Source generators to eliminate reflection and runtime overhead.
- Zero-allocation hot paths for performance-critical scenarios.
- Strong typing with
in
parameters, avoiding boxing and defensive copies. - Testable, deterministic APIs that pair naturally with BDD and xUnit/NUnit/MSTest.
Our goal: make patterns a joy to use, not a chore to implement.
🚀 Quick Start
Install via NuGet:
dotnet add package PatternKit --version <latest>
Use a pattern immediately—here’s a simple Strategy:
using PatternKit.Behavioral.Strategy;
var classify = Strategy<int, string>.Create()
.When(i => i > 0).Then(i => "positive")
.When(i => i < 0).Then(i => "negative")
.Default(_ => "zero")
.Build();
Console.WriteLine(classify.Execute(5)); // positive
Console.WriteLine(classify.Execute(-3)); // negative
Console.WriteLine(classify.Execute(0)); // zero
Or a TryStrategy for first-match-wins pipelines:
var parse = TryStrategy<string, int>.Create()
.Always((in string s, out int r) => int.TryParse(s, out r))
.Finally((in string _, out int r) => { r = 0; return true; })
.Build();
if (parse.Execute("123", out var n))
Console.WriteLine(n); // 123
📦 Patterns (Planned & In Progress)
PatternKit will grow to cover Creational, Structural, and Behavioral patterns with fluent, discoverable APIs:
Category | Patterns ✓ = implemented |
---|---|
Creational | Factory ✓ • Composer ✓ • ChainBuilder ✓ • BranchBuilder ✓ • MutableBuilder ✓ • Prototype ✓ • Singleton ✓ |
Structural | Adapter ✓ • Bridge ✓ • Composite ✓ • Decorator (planned) • Facade (planned) • Flyweight (planned) • Proxy (planned) |
Behavioral | Strategy ✓ • TryStrategy ✓ • ActionStrategy ✓ • ActionChain ✓ • ResultChain ✓ • Command (planned) • Iterator (planned) • Mediator (planned) • Memento (planned) • Observer (planned) • State (planned) • Template Method (planned) • Visitor (planned) |
Each pattern will ship with:
- A fluent API (
.When(...)
,.Then(...)
,.Finally(...)
, etc.) - Source-generated boilerplate where possible.
- DocFX-ready documentation and TinyBDD tests.
🧪 Testing Philosophy
All patterns are validated with TinyBDD and xUnit:
[Feature("Strategy")]
public class StrategyTests : TinyBddXunitBase
{
[Scenario("Positive/negative classification")]
[Fact]
public async Task ClassificationWorks()
{
await Given("a strategy with three branches", BuildStrategy)
.When("executing with 5", s => s.Execute(5))
.Then("result should be 'positive'", r => r == "positive")
.AssertPassed();
}
}
We keep tests behavior-driven, readable, and high coverage.
💡 Design Goals
- Declarative: Favor expression-based and fluent APIs over imperative setup.
- Minimalism: Prefer single-responsibility types and low ceremony.
- Performance: Allocation-free handlers,
in
parameters, ahead-of-time friendly. - Discoverability: IntelliSense-first APIs; easy to read, easy to write.
- Testability: TinyBDD integration and mocks built-in where applicable.
🛠 Requirements
- .NET 9.0 or later (we use
in
parameters and modern generic features). - C# 12 features enabled (
readonly struct
, static lambdas, etc.).
📚 Documentation
Full API documentation is published with DocFX (coming soon). Each type and member ships with XML docs, examples, and cross-links between patterns.
🤝 Contributing
We welcome issues, discussions, and PRs. Focus areas:
- Adding new patterns (start with Behavioral for max impact)
- Improving fluent builder syntax and source generator coverage
- Writing TinyBDD test scenarios for edge cases
📄 License
MIT — see LICENSE for details.
❤️ Inspiration
PatternKit is inspired by:
- The Gang of Four design patterns
- Fluent APIs from ASP.NET Core, System.Linq, and modern libraries
- The desire to make patterns readable, performant, and fun to use in 2025+
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Threading.Tasks.Extensions (>= 4.6.3)
-
.NETStandard 2.1
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on PatternKit.Core:
Package | Downloads |
---|---|
PatternKit.Examples
PatternKit is a collection of design patterns implemented in a fluent API style for .NET, enabling developers to easily integrate common design patterns into their applications with readable and maintainable code. |
GitHub repositories
This package is not used by any popular GitHub repositories.