[hibernate-dev] [HV] Design philosophy
Emmanuel Bernard
emmanuel at hibernate.org
Wed Apr 11 05:11:19 EDT 2012
BTW I don't know when the properties have been added to URL, but if it's still possible, I'd use an array on protocol, host, port to be able to do:
@URL(host={"hibernate.org", ""www.hibernate.org"})
On 11 avr. 2012, at 10:52, Emmanuel Bernard wrote:
> Hi all,
> Hardy, Gunnar and I started a discussion that is worth more Eyeballs.
>
> It started after the addition of a `regexp` attribute on @Email to be able to restrict the shape of the email via an extra regexp.
>
> Here is the exchange
>
>> Emmanuel:
>> I don't understand. Is this feature different than
>>
>> @Email @Pattern("regexp")
>>
>> If that's different I have not found how. If it's not I don't see the point in adding complexity to @Email.
>
>> Hardy:
>> The difference is that you only have a single annotation. Internally you are using composing constraints (so not really adding much complexity)
>> and report as single violation (which is probably where the advantage lies).
>>
>> It is probably a matter of taste whether you prefer a single @email annotation or @email and @pattern.
>
>> Emmanuel:
>> Also it makes for much less readable code which is something we have constantly discouraged.
>>
>> What reads better @Email(regexp="^((?!\\.org).)*$") or @SomeEmail(excludeTld="org"). Granted, one need to write
>> an custom annotation but readability is much different. I leave it as an exercise to write the same samples if 5 TLDs
>> need to be excluded :)
>
>> Hardy:
>> @email(regexp="^((?!\.org).)*$")
>> You must admit, this is a little bit of a special case. I stumbled across this when looking for negating regexp.
>>
>> Granted, one need to write an custom annotation but readability is much different.
>> in this particular case you might be better off w/ a custom constraint. A more common use case would be to restrict to your
>> own subdomain
>
>> Gunnar:
>> I think we're basically offering users several options/styles here from which they may chose the one they like best.
>> I see use cases where a custom constraint isn't worth the efforts and having the additional pattern restriction within the
>> @Email constraint might be preferable over expressing it via a separate @Pattern constraint.
>>
>> It's also a good thing IMO to be consistent with @URL where we have a regexp() attribute as well (see HV-406).
>
> To reply to this thread and in particular Gunnar, let me expand a bit. Hibernate Validator and to a certain extend other Hibernate projects
> have been designed to improve developer productivity not improve choice of style. Choice of style is an important reason why the Java
> web stack is so complex to build an application. I don't want to be responsible for adding garbage.
>
> When adding a feature, we have always implicitly asked ourselves this pool of questions:
>
> 1. Does it feel like the right way of doing things?
> If it's not, we have been prone to wait till we mature on the idea. Take collection element constraints as a good example. We know the right way but
> it's not available to us yet
> 2. Can I do it with an existing construct with similar or less complexity?
> 3. Is this feature wrong? eg validating unicity with a database query is wrong.
> 4. Is this a popular request?
> 5. Is this feature useful in the general scheme? "What's your use case?" mantra.
> 6. Is it the most readable approach?
> 7. Is the feature designed consistently with the rest of the library
>
> Keeping the library useful and simple is a constant battle against people wanting to throw new features at it but resisting to the dark side is
> important. More than that, I think that's our job to be this gate keeper and we deserve to be shot in the knee and kicked while on the ground.
> We are here to make the world a better place, not give food to guideline writers.
>
> If we go back to our example, @Email(regexp=""^((?!\\.org).)*$") is not really 5 nor even 2 times better than @Email @Pattern((regexp=""^((?!\\.org).)*$")
> And frankly, regexp is about the less readable construct in the history of programming languages. I am not against some functional flags to
> restrict the domain, ensure that it's an email address reachable from the internet etc etc as this can be made very readable and clearly
> adds over a mix of @Email + @Pattern. And I also dislike @URL.regexp for the same reasons.
>
>
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
More information about the hibernate-dev
mailing list