Overview
The Product module implements a comprehensive product catalog system supporting:- Product types (simple products)
- Package types (composite products)
- Product instances (serialized, batched)
- Product identifiers (GTIN, ISBN, IMEI)
- Feature-based product definitions
- Applicability constraints
Core Concepts
Product Hierarchy
The module uses the Composite Pattern:Product- Component interfaceProductType- Leaf (individual product)PackageType- Composite (package of products)
Product Interface
Product
Product Identifiers
Supports various product identification standards:Product Catalog
Central registry for product definitions:ProductCatalog
Catalog Entry
Product Features
Define product characteristics with constraints:Feature Definition
Feature Constraints
Allowed Values Constraint
Allowed Values Constraint
Numeric Range Constraint
Numeric Range Constraint
Decimal Range Constraint
Decimal Range Constraint
Date Range Constraint
Date Range Constraint
Product Instances
Physical or logical instances of products:Instance Types
Instance Hierarchy
Building Instances
InstanceBuilder
Serial Numbers
Unique instance identifiers:Batches
Group instances from same production run:Batch
Package Types
Composite products containing other products:Package Structure
Package Validation
Product Building
Fluent API for product creation:ProductBuilder
Applicability Context
Determine product availability:Applicability
Product Commands
Domain commands for product operations:Commands
Tracking Strategies
Define how products are tracked:ProductTrackingStrategy
Real-World Example: Electronics Store
Complete Product Setup
Best Practices
Use Standard IDs
Use GTIN/ISBN/IMEI for real products
Define Features
Always specify feature constraints
Track Appropriately
Choose tracking strategy based on business needs
Validate Packages
Always validate package contents
