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 ✓EnterpriseCloud & 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.

Code
Result

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

  1. Evaluate the sample true/false.
  2. Add OrSpec.
  3. Reuse OpenOrderSpec in two features.
  4. Fail a Closed order.
  5. 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.

Mid PDF Detailed
Abstract Factory (LoggerFactory):?
Short answer: The LoggerFactory class defines a factory method CreateLogger that returns an ILogger object. This is a generic interface for creating various logger types without specifying the concrete class directly. Re…
Mid PDF Detailed
Redo Functionality:?
Short answer: You can extend the system by adding redo functionality. After an undo operation, you could store the undone command in a separate stack and allow users to redo the previous undo operation. Real-world exampl…
Mid PDF Detailed
Abstract Expression (IExpression):?
Short answer: The IExpression interface declares an Interpret method, which is the core of the interpreter pattern. This method is used to interpret and evaluate expressions. public interface IExpression Example code { i…
Mid PDF Detailed
Mediator (ChatMediator):?
Short answer: The mediator manages communication between the users. It maintains a list of all users and broadcasts messages to all other users when one user sends a message. This keeps the users from directly knowing ab…
Mid PDF Detailed
Component (ICoffee):?
Short answer: This is the base interface that defines the common methods for the Cost() and Description() that every coffee component will implement. public interface ICoffee Example code { double Cost(); string Descript…
Questions on this lesson 0

Sign in to ask a question or upvote helpful answers.

No questions yet — be the first to ask!

Design Patterns in C#
Course syllabus

Design Patterns in C# Tutorial

Module 1: Creational Design Patterns
Module 2: Structural Design Patterns
Module 3: Behavioral Design Patterns
Module 4: Enterprise Design Patterns
Module 5: Modern Enterprise Patterns
Module 6: Microservices & Cloud Patterns
Module 7: ASP.NET Core Architecture Patterns
Module 8: Interview & System Design
Toolliyo Assistant
Ask about tutorials, ebooks, training, pricing, mentor services, and support. I use public site content only—not admin or internal tools.

care@toolliyo.com

Need callback? Share your details