Skip to content

References

Reference materials for deeper learning.


  • Title: Domain-Driven Design: Tackling Complexity in the Heart of Software
  • Author: Eric Evans
  • Publisher: Addison-Wesley, 2003
  • Key Content: Foundational definition of the Specification pattern, Repository pattern
  • Title: Implementing Domain-Driven Design
  • Author: Vaughn Vernon
  • Publisher: Addison-Wesley, 2013
  • Key Content: Practical DDD implementation patterns, Specification usage examples

Patterns of Enterprise Application Architecture

Section titled “Patterns of Enterprise Application Architecture”
  • Title: Patterns of Enterprise Application Architecture
  • Author: Martin Fowler
  • Publisher: Addison-Wesley, 2002
  • Key Content: Systematic definition of Specification pattern and Repository pattern
  • Title: Functional Programming in C#: How to write better C# code
  • Author: Enrico Buonanno
  • Publisher: Manning, 2022 (2nd Edition)
  • Key Content: Expression Trees, functional composition patterns

Specification Pattern

Specification Pattern in DDD

Expression Trees in C#


LibraryDescriptionNuGet
FunctoriumSpecification framework used in this tutorial
Ardalis.SpecificationSpecification library by Steve Smith
LibraryDescriptionNuGet
MediatRCQRS/Mediator pattern
FluentValidationValidation library
LanguageExt.CoreFunctional programming types
LibraryDescriptionNuGet
Microsoft.EntityFrameworkCoreEF Core ORM
Microsoft.EntityFrameworkCore.InMemoryInMemory for testing
LibraryDescriptionNuGet
ArchUnitNETArchitecture testing
ShouldlyAssertion library
xUnitTesting framework
NSubstituteMocking library

Src/Functorium/Domains/Specifications/
├── Specification.cs # Abstract base class
├── IExpressionSpec.cs # Expression interface
├── ExpressionSpecification.cs # Expression Tree support
├── AllSpecification.cs # Identity element (internal sealed)
├── AndSpecification.cs # AND composition (internal sealed)
├── OrSpecification.cs # OR composition (internal sealed)
├── NotSpecification.cs # NOT negation (internal sealed)
└── Expressions/
├── SpecificationExpressionResolver.cs # Expression synthesis utility
└── PropertyMap.cs # Entity->Model conversion
Docs.Site/src/content/docs/tutorials/specification-pattern/
├── Part1-Specification-Basics/ # Basics (4 chapters)
├── Part2-Expression-Specification/ # Expression (4 chapters)
├── Part3-Repository-Integration/ # Repository Integration (4 chapters)
├── Part4-Real-World-Patterns/ # Real-World Patterns (4 chapters)
└── Part5-Domain-Examples/ # Domain Examples (2 chapters)

  1. Specification chapter in Eric Evans’ DDD book
  2. This tutorial Part 1 (Chapters 1-4)
  3. Read the Functorium Specification source code
  1. .NET Expression Trees official documentation
  2. This tutorial Parts 2-3
  3. Comparative analysis with Ardalis.Specification
  1. “Implementing Domain-Driven Design” book
  2. This tutorial Parts 4-5
  3. Writing architecture tests with ArchUnitNET

This tutorial was written based on the actual development experience of the Functorium project’s Specification framework.