package com.social.media.domain.shared;

/**
 * Marker interface for Value Objects in Domain-Driven Design.
 * 
 * Value Objects are immutable objects that represent concepts in the domain
 * that are defined by their attributes rather than their identity.
 * 
 * All Value Objects should:
 * - Be immutable
 * - Have value equality (equals/hashCode based on attributes)
 * - Be self-validating
 * - Have no side effects
 * 
 * @author Social Media Manager Team
 * @version 2.0
 * @since 2025-01-01
 */
public interface ValueObject {
    
    /**
     * Validates the value object state.
     * Should be called in constructors and factory methods.
     * 
     * @throws IllegalArgumentException if the value object is invalid
     */
    default void validate() {
        // Default implementation does nothing
        // Concrete value objects should override if validation is needed
    }
}
