Sample Applications
Explore working examples demonstrating different workflows and features of JD.Domain.
Available Samples
Code-First Sample
Location: samples/JD.Domain.Samples.CodeFirst
Demonstrates building a domain model from scratch using the fluent DSL.
Features:
- Entity and value object definitions
- Business rules (invariants, validators, policies)
- EF Core integration with
ApplyDomainManifest() - ASP.NET Core validation middleware
- Runtime rule evaluation
Key Files:
BloggingDomain.cs- Domain model definition using fluent APIBlogRules.cs- Business rules for Blog and Post entitiesProgram.cs- ASP.NET Core setup with domain validation
Run:
cd samples/JD.Domain.Samples.CodeFirst
dotnet run
Database-First Sample
Location: samples/JD.Domain.Samples.DbFirst
Demonstrates adding JD.Domain rules to existing EF Core scaffolded entities.
Features:
- Working with pre-existing entity classes
- Adding business rules without modifying entities
- Manual manifest creation for existing models
- Validation in an existing ASP.NET Core application
Key Files:
Data/- Scaffolded EF Core entities (unmodified)BloggingManifest.cs- Manual manifest for existing entitiesBlogRules.cs- Business rules attached to existing types
Run:
cd samples/JD.Domain.Samples.DbFirst
dotnet run
Hybrid Sample
Location: samples/JD.Domain.Samples.Hybrid
Demonstrates version management with snapshots and diff tools.
Features:
- Domain model snapshots (canonical JSON)
- Comparing snapshots to detect changes
- Breaking change detection
- Migration plan generation
- CLI tool integration
Key Files:
v1/BloggingDomain.cs- Initial domain versionv2/BloggingDomain.cs- Updated domain versionProgram.cs- Snapshot comparison and diff demo
Run:
cd samples/JD.Domain.Samples.Hybrid
dotnet run
Manifest Generation Sample ⭐ NEW
Location: samples/ManifestGeneration.Sample
Demonstrates automatic manifest generation from entity classes using source generators.
Features:
- Opt-in attributes (
[DomainEntity],[DomainValueObject]) - Automatic property metadata extraction from data annotations
- Assembly-level manifest configuration
- Property exclusion with
[ExcludeFromManifest] - NO manual string writing required
Key Files:
Customer.cs- Entity with[DomainEntity]attributeOrder.cs- Entity with table/schema configurationAddress.cs- Value object with[DomainValueObject]attributeAssemblyInfo.cs- Assembly-level[GenerateManifest]configurationProgram.cs- Demonstrates using auto-generated manifest
Run:
cd samples/ManifestGeneration.Sample
dotnet run
Expected Output:
=== JD.Domain Manifest Generation Sample ===
Manifest Name: ECommerce
Version: 1.0.0
Sources: Generator
Entities: 2
- Customer (Table: dbo.Customers)
Properties: 4
Keys: Id
- Order (Table: sales.Orders)
Properties: 5
Keys: OrderId
Value Objects: 1
- Address
Properties: 4
NO MANUAL STRING WRITING REQUIRED!
Sample Workflow Comparison
| Feature | Code-First | DB-First | Hybrid | Manifest Generation |
|---|---|---|---|---|
| Starting Point | Fresh codebase | Existing database | Existing domain | Existing entities |
| Manifest Creation | Fluent DSL | Manual construction | Fluent DSL | Automatic (source generator) |
| EF Core Entities | Generated from manifest | Pre-existing | Pre-existing | Pre-existing |
| Business Rules | Defined with manifest | Added separately | Defined with manifest | Added separately |
| Version Management | Optional | Not shown | Primary focus | Compatible |
| Best For | New projects | Legacy databases | Evolving domains | Quick adoption |
Running All Samples
Run all samples in sequence:
# Code-First
dotnet run --project samples/JD.Domain.Samples.CodeFirst
# DB-First
dotnet run --project samples/JD.Domain.Samples.DbFirst
# Hybrid
dotnet run --project samples/JD.Domain.Samples.Hybrid
# Manifest Generation
dotnet run --project samples/ManifestGeneration.Sample
Building Samples
Build all samples:
dotnet build JD.Domain.sln --filter="samples/**"
Next Steps
After exploring the samples:
Choose Your Workflow
Learn Key Concepts
Integration Guides