-
Notifications
You must be signed in to change notification settings - Fork 55
Architecture
Accord was built with four principal design goals:
- Minimalistic: Provide the bare minimum functionality necessary to deal with the problem domain. Any extended functionality is delivered in a separate module and satisfies the same design goals.
- Simple: Provide a very simple and lean API across all four categories of call sites (validator definition, combinator definition, validator execution and result processing).
- Self-contained: Reduce or eliminate external dependencies entirely where possible.
- Integrated: Provide extensions to integrate with common libraries and enable simple integration points where possible.
We also started off with a number of desirable traits that may or may not make (or have made) it into the library, listed from the most to the least important:
-
Avoid user-specified strings in the API (this includes
scala.Symbol
s). This manifests in two ways:-
Validation rules cannot be executed via reflection; and
-
Descriptions are automatically provided for expressions being validated. For instance, when validating the expression
someInstance.someField
, a violation message should include not only the value of the expression but also a textual representation of the field itself (for example, when validatingsomeInstance
a meaningful violation message would besomeField must not be empty
).The rationale behind this is that, in contrast with most testing frameworks - where a failed assertion typically halts execution or at least provides a stack trace to reference the code - a runtime validation engine should provide for multiple rule violations, and can/should not point to the code.
-
- Performance comparable with, or better than, common JSR 303 providers (specifically Hibernate Validator and Apache bval) at runtime.
WIP