SOLID & Design Patterns Interview Question #117

What is the Specification Pattern useful for in data access?

Architectural Patterns, Application Boundaries & Distributed Design Patterns Senior Advanced

Quick Interview Answer

A Specification can package query criteria and related query decisions into a reusable object instead of duplicating complex filters across repositories or services.

Detailed Explanation

A Specification can package query criteria and related query decisions into a reusable object instead of duplicating complex filters across repositories or services.

When used with EF Core, specifications should preserve expression trees or other translatable constructs so filtering occurs in the database. Compiling predicates too early can move work into application memory.

Code Example

public class ActiveOrdersSpecification
{
    public Expression<Func<Order, bool>> Criteria
        => x => x.Status == OrderStatus.Active;
}

// Repository can apply Criteria to IQueryable<Order>.