| name | net-domain-model |
| description | Create domain models following Domain-Driven Design principles |
| license | MIT |
| compatibility | opencode |
| metadata | [object Object] |
What I Do
I help you create domain models following DDD principles:
- Entities with identity
- Value objects (immutable)
- Aggregates and aggregate roots
- Domain events
- Repositories interfaces
- Domain services
When to Use Me
Use this skill when:
- Modeling business domain
- Creating entity classes
- Implementing value objects
- Defining aggregate boundaries
- Creating domain services
Domain Model Structure
src/{ProjectName}.Domain/
├── Entities/
│ ├── Product.cs
│ ├── Order.cs
│ └── Customer.cs
├── ValueObjects/
│ ├── Money.cs
│ ├── Email.cs
│ └── Address.cs
├── Aggregates/
│ └── OrderAggregate/
│ ├── Order.cs
│ └── OrderItem.cs
├── Interfaces/
│ ├── IProductRepository.cs
│ ├── IOrderRepository.cs
│ └── IUnitOfWork.cs
├── Events/
│ ├── OrderCreatedEvent.cs
│ └── OrderPaidEvent.cs
└── Services/
└── DomainService.cs
Patterns I Implement
Entity
public abstract class Entity
{
public Guid Id { get; protected set; }
public DateTime CreatedAt { get; protected set; }
public DateTime? UpdatedAt { get; protected set; }
public List<IDomainEvent> DomainEvents { get; } = new();
protected Entity(Guid id) => Id = id;
protected Entity() { }
}
Value Object
public abstract class ValueObject : IEquatable<ValueObject>
{
protected abstract IEnumerable<object> GetEqualityComponents();
public bool Equals(ValueObject? other)
{
if (other is null) return false;
if (ReferenceEquals(this, other)) return true;
return GetEqualityComponents()
.SequenceEqual(other.GetEqualityComponents());
}
}
Aggregate Root
public abstract class AggregateRoot : Entity
{
public override void RaiseDomainEvent(IDomainEvent domainEvent)
{
DomainEvents.Add(domainEvent);
}
public void ClearDomainEvents() => DomainEvents.Clear();
}
Best Practices
- Entities protect invariants
- Value objects are immutable
- Aggregates define consistency boundaries
- Domain events capture business events
- Repositories are in Domain layer
- Domain services contain business logic
Example Usage
Create a domain model for an e-commerce system with:
- Product entity
- Order aggregate root
- Money value object
- OrderCreated domain event
- Repository interfaces
I will generate complete domain model following DDD patterns.