Types such as `Product` and `CreateProduct` could probably implement `equals` and `hashCode`. Does that make sense?