References
Official Documentation
Section titled “Official Documentation”LanguageExt
Section titled “LanguageExt”- GitHub: https://github.com/louthy/language-ext
- Documentation: https://languageext.readthedocs.io/
- NuGet: https://www.nuget.org/packages/LanguageExt.Core
Ardalis.SmartEnum
Section titled “Ardalis.SmartEnum”- GitHub: https://github.com/ardalis/SmartEnum
- NuGet: https://www.nuget.org/packages/Ardalis.SmartEnum
ArchUnitNET
Section titled “ArchUnitNET”- GitHub: https://github.com/TNG/ArchUnitNET
- NuGet: https://www.nuget.org/packages/TngTech.ArchUnitNET.xUnit
References
Section titled “References”Domain-Driven Design
Section titled “Domain-Driven Design”- 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
Implementing Domain-Driven Design
Section titled “Implementing Domain-Driven Design”- Title: Implementing Domain-Driven Design
- Author: Vaughn Vernon
- Published: Addison-Wesley, 2013
- Key Content: DDD practical implementation patterns, advanced value objects
Functional Programming in C#
Section titled “Functional Programming in C#”- 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
Domain Modeling Made Functional
Section titled “Domain Modeling Made Functional”- Title: Domain Modeling Made Functional
- Author: Scott Wlaschin
- Published: Pragmatic Bookshelf, 2018
- Key Content: Functional DDD, type-driven design
Online Resources
Section titled “Online Resources”Blogs & Articles
Section titled “Blogs & Articles”Railway Oriented Programming
- https://fsharpforfunandprofit.com/rop/
- Scott Wlaschin’s error handling pattern series
Value Object Patterns
- https://enterprisecraftsmanship.com/posts/value-objects-explained/
- Vladimir Khorikov’s in-depth analysis of value objects
Always Valid Domain Model
- https://enterprisecraftsmanship.com/posts/always-valid-domain-model/
- Designing always-valid domain models
Videos
Section titled “Videos”NDC Conferences
- “Functional Programming in C#” - Enrico Buonanno
- “Domain Modeling Made Functional” - Scott Wlaschin
Pluralsight
- “Domain-Driven Design Fundamentals”
- “Applying Functional Principles in C#“
Related Libraries
Section titled “Related Libraries”Functional Programming
Section titled “Functional Programming”Libraries that support functional patterns in C#.
| Library | Description | NuGet |
|---|---|---|
| LanguageExt.Core | Core functional types | ✅ |
| LanguageExt.Sys | Side effect management | ✅ |
| CSharpFunctionalExtensions | Lightweight Result type | ✅ |
| Optional | Simple Option implementation | ✅ |
DDD & Clean Architecture
Section titled “DDD & Clean Architecture”Libraries used for Domain-Driven Design and Clean Architecture implementation.
| Library | Description | NuGet |
|---|---|---|
| MediatR | CQRS/Mediator pattern | ✅ |
| Ardalis.Specification | Repository pattern | ✅ |
| FluentValidation | Validation library | ✅ |
| ErrorOr | Error/Result type | ✅ |
Testing
Section titled “Testing”Libraries used for writing tests and architecture verification.
| Library | Description | NuGet |
|---|---|---|
| ArchUnitNET | Architecture tests | ✅ |
| Shouldly | Assertion library | ✅ |
| xUnit | Test framework | ✅ |
| NSubstitute | Mock library | ✅ |
Functorium Project Reference
Section titled “Functorium Project Reference”Source Code Location
Section titled “Source Code Location”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 hierarchyCQRS Integration
Section titled “CQRS Integration”Src/Functorium/Applications/Cqrs/├── FinExtensions.cs # Fin<T> → Response conversion└── ValidationExtensions.cs # Validation → Response conversionTutorial Projects
Section titled “Tutorial Projects”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)Recommended Learning Order
Section titled “Recommended Learning Order”Beginners (Functional Introduction)
Section titled “Beginners (Functional Introduction)”- Quick Start in the official LanguageExt documentation
- “Functional Programming in C#” book, chapters 1-5
- This tutorial, Part 1 (Chapters 1-6)
Intermediate (Practical Application)
Section titled “Intermediate (Practical Application)”- “Domain Modeling Made Functional” book
- This tutorial, Parts 2-3
- Railway Oriented Programming blog
Advanced (Architecture Design)
Section titled “Advanced (Architecture Design)”- “Implementing Domain-Driven Design” book
- This tutorial, Parts 4-5
- Writing architecture tests with ArchUnitNET
Community
Section titled “Community”GitHub Discussions
Section titled “GitHub Discussions”- LanguageExt: https://github.com/louthy/language-ext/discussions
- Functorium: https://github.com/hhko/Functorium/discussions
Stack Overflow Tags
Section titled “Stack Overflow Tags”languageextdomain-driven-designvalue-objectsfunctional-programming
Next Steps
Section titled “Next Steps”Check the FAQ.
→ E. FAQ