design of ValueObject to encapsulate validation