Using the information design model shown in Figure 10.5 above as the starting point, we make a JavaScript class model, essentially by decorating attributes with a «get/set» stereotype (implying that they have implicit getters and setters), and by adding (class-level) check methods:
Notice that, for any multi-valued enumeration attribute (like
someThings) we add a class-level check function for single
values (like checkSomeThing) and another one for value sets
(like checkSomeThings) both returning an object of type
ConstraintViolation.
The implicit getters and setters implied by the «get/set» stereotype are a special feature of ES5, allowing to define
methods for getting and setting the value of a property p
while keeping the simple syntax of getting its value with v =
o.p, and setting it with o.p = expr. They require to define another, internal, property (like _p) for
storing the value of p because the name "p" does not refer to
a normal property, but rather to a pair of get/set methods.
The most common reason for using implicit getters and setters is the need to always check constraints before setting a property. This is also the reason why we will use them.