The value object design pattern