[hibernate-dev] [HV] Design philosophy

Emmanuel Bernard emmanuel at hibernate.org
Wed Apr 11 09:43:38 EDT 2012


On 11 avr. 2012, at 12:03, Hardy Ferentschik wrote:

>> 
>> If we go back to our example, @Email(regexp=""^((?!\\.org).)*$") is not really 5 nor even 2 times better than @Email @Pattern((regexp=""^((?!\\.org).)*$")
> 
> I am not sure how one would measure this leverage factor so I stay out of it. Adding the regexp is backwards compatible, its optional and hence for most users
> not visible. If you are going to need it you have the choice between:
> 
> @Email(regexp=""^((?!\\.org).)*$") 
> 
> or 
> 
> @Email 
> @Pattern((regexp=""^((?!\\.org).)*$")
> 
> I don't see any harm here. In fact I think that the first version even adds a little more context information, because it tells me that the main concern is about making sure 
> that we have an email (meeting an additional validation criteria). In the second case the @Pattern could also be just replacing a @NotEmpty (depending on the 
> regular expression of course) constraint.

To me, it adds complexity :

- in HV's code but that's not a strong factor in this case
- more doc
- as a user looking at @Email when I use it, I have to understand why such an option has been added and if I need it

And I don't see why you don't add regexp to CreditCardNumber, ModCheck, NotBlank, NotEmpty and SafeHtml. There are "equally valid" use cases for that. But if you add them to all these annotations, I will start to question your massive duplication error.

> 
>> And frankly, regexp is about the less readable construct in the history of programming languages.
> 
> and one of the most powerful one as well :-) 

Sure but we have @Pattern for that already :)

> 
>> I am not against some functional flags to
>> restrict the domain, ensure that it's an email address reachable from the internet etc etc
> 
> I am not against additional flags either, and I was in fact thinking whether a "reachable" flag to @Email and @URL would make sense. This is something which is outside
> the character based validation. Regarding the domain restriction flag, where do you draw the line? Do you want a includeDomain, excludeDomain, includeUser, excludeUser, allowGmail, disallowYahoo, … - or do you rather add a regexp flag?

That's the thing, you have to draw a line in the sand and find the top n use cases you think an annotation can deal with without becoming a Christmas tree. Thinking about it, I think it would make sense to offer a setting to enforce the email does not address the local network but is globally accessible. About domain restriction, I'm thinking that invalid address != not from the expected domain and a separate constraint makes more sense.


More information about the hibernate-dev mailing list