Skip to content

References


  • Title: Domain-Driven Design: Tackling Complexity in the Heart of Software
  • Author: Eric Evans
  • Published: Addison-Wesley, 2003
  • Key Content: Original definitions of value objects, entities, and aggregates
  • Title: Implementing Domain-Driven Design
  • Author: Vaughn Vernon
  • Published: Addison-Wesley, 2013
  • Key Content: DDD practical implementation patterns, advanced value objects
  • Title: Functional Programming in C#: How to write better C# code
  • Author: Enrico Buonanno
  • Published: Manning, 2022 (2nd Edition)
  • Key Content: Option, Either, Railway Oriented Programming
  • Title: Domain Modeling Made Functional
  • Author: Scott Wlaschin
  • Published: Pragmatic Bookshelf, 2018
  • Key Content: Functional DDD, type-driven design

Railway Oriented Programming

Value Object Patterns

Always Valid Domain Model

NDC Conferences

  • “Functional Programming in C#” - Enrico Buonanno
  • “Domain Modeling Made Functional” - Scott Wlaschin

Pluralsight

  • “Domain-Driven Design Fundamentals”
  • “Applying Functional Principles in C#“

Libraries that support functional patterns in C#.

LibraryDescriptionNuGet
LanguageExt.CoreCore functional types
LanguageExt.SysSide effect management
CSharpFunctionalExtensionsLightweight Result type
OptionalSimple Option implementation

Libraries used for Domain-Driven Design and Clean Architecture implementation.

LibraryDescriptionNuGet
MediatRCQRS/Mediator pattern
Ardalis.SpecificationRepository pattern
FluentValidationValidation library
ErrorOrError/Result type

Libraries used for writing tests and architecture verification.

LibraryDescriptionNuGet
ArchUnitNETArchitecture tests
ShouldlyAssertion library
xUnitTest framework
NSubstituteMock library

Src/Functorium/Domains/ValueObjects/
├── IValueObject.cs # Marker interface
├── AbstractValueObject.cs # Base abstract class
├── ValueObject.cs # Composite value object
├── SimpleValueObject.cs # Single value wrapper
├── ComparableValueObject.cs # Comparable composite
├── ComparableSimpleValueObject.cs # Comparable single
└── Validations/
├── ValidationApplyExtensions.cs # Tuple Apply (internal .As() handling)
└── Typed/
├── ValidationRules.cs # Type-safe validation entry point
├── TypedValidation.cs # Type information wrapper
└── TypedValidationExtensions.*.cs # Then chaining methods
Src/Functorium/Domains/Errors/
├── DomainError.cs # DomainError.For<T>() helper
└── DomainErrorType.cs # Error type sealed record hierarchy
Src/Functorium/Applications/Cqrs/
├── FinExtensions.cs # Fin<T> → Response conversion
└── ValidationExtensions.cs # Validation → Response conversion
Docs.Site/src/content/docs/tutorials/functional-valueobject/
├── Part1-ValueObject-Concepts/ # Part 1: Understanding Concepts (16)
├── Part2-Validation-Patterns/ # Part 2: Validation Patterns (6)
├── Part3-ValueObject-Patterns/ # Part 3: Value Object Patterns (9)
├── Part4-Practical-Guide/ # Part 4: Practical Guide (4)
└── Part5-Domain-Examples/ # Part 5: Domain Examples (4)

  1. Quick Start in the official LanguageExt documentation
  2. “Functional Programming in C#” book, chapters 1-5
  3. This tutorial, Part 1 (Chapters 1-6)
  1. “Domain Modeling Made Functional” book
  2. This tutorial, Parts 2-3
  3. Railway Oriented Programming blog
  1. “Implementing Domain-Driven Design” book
  2. This tutorial, Parts 4-5
  3. Writing architecture tests with ArchUnitNET

  • languageext
  • domain-driven-design
  • value-objects
  • functional-programming

Check the FAQ.

E. FAQ