Tutorials Design Patterns in C#
Specification Pattern — Complete Guide
Specification Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.
On this page
Design Patterns in C# · Lesson 27 of 69
Specification Pattern
GoF Core ✓ → Enterprise → Cloud & Craft
Enterprise · 2 — App patterns · ~6 min · Module 4: Enterprise Design Patterns
What is this?
Specification encapsulates a business rule as an object that can test entities and often compose with And/Or.
Why should you care?
ShopNest “open high-value orders” filters should be reusable in queries and domain checks.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public interface ISpecification<T> { bool IsSatisfiedBy(T candidate); }
public sealed record Order(string Status, decimal Total);
public sealed class OpenOrderSpec : ISpecification<Order>
{
public bool IsSatisfiedBy(Order o) => o.Status == "Open";
}
public sealed class MinTotalSpec : ISpecification<Order>
{
private readonly decimal _min;
public MinTotalSpec(decimal min) => _min = min;
public bool IsSatisfiedBy(Order o) => o.Total >= _min;
}
public sealed class AndSpec<T> : ISpecification<T>
{
private readonly ISpecification<T> _a, _b;
public AndSpec(ISpecification<T> a, ISpecification<T> b) { _a = a; _b = b; }
public bool IsSatisfiedBy(T c) => _a.IsSatisfiedBy(c) && _b.IsSatisfiedBy(c);
}
var spec = new AndSpec<Order>(new OpenOrderSpec(), new MinTotalSpec(1000));
Console.WriteLine(spec.IsSatisfiedBy(new Order("Open", 2500)));
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Rules become objects you can reuse and combine.
- In EF you often also expose Expression
> for SQL translation — covered in the enterprise query lesson.
Practice next
- Evaluate the sample true/false.
- Add OrSpec.
- Reuse OpenOrderSpec in two features.
- Fail a Closed order.
- Add CustomerVipSpec.
Remember
Rules as objects. Compose with And/Or. Reuse across app layers.
ShopNest open-order rules
Ops and API share OpenOrderSpec.
Outcome: One definition of “open” everywhere.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!