For the following projects, you have to take care of
adding, for every property, a check function that validates the constraints defined for the property, and a setter method that invokes the check function and is to be used for setting the value of the property,
performing
validation before any data is saved in the
add
and update
methods.
in the model code of your app, while In the user interface ("view") code you have to take care of
styling the user interface with CSS rules (for instance, by integrating a CSS library such as Yahoo's Pure CSS),
validation on user input for providing immediate feedback to the user,
validation on form submission for preventing the submission of invalid data.
Make sure that your pages comply with the XML syntax of HTML5 by
means of XHTML5 validation
(setting the validator field Preset
to "HTML5 + SVG 1.1 +
MathML 3.0"), and that your JavaScript code complies with our Coding
Guidelines and its style is checked with JSHint.
If you have any questions about how to carry out the following projects, you can ask them on our discussion forum.
The purpose of the app to be built is managing information about movies. Like in the book data management app discussed in the tutorial, you can make the simplifying assumption that all the data can be kept in main memory. Persistent data storage is implemented with JavaScript's Local Storage API.
The app deals with just one object type: Movie
, as
depicted in the following class diagram.
In this model, the following constraints have been expressed:
Due to the fact that the movieId
attribute is
declared to be the standard
identifier of Movie
, it is mandatory and unique.
The title
attribute is mandatory, as indicated by its
multiplicity expression [1], and has a string length
constraint requiring its values to have at
most 120 characters.
The releaseDate
attribute has an interval
constraint: it must be greater than or equal
to 1895-12-28.
Notice that the releaseDate
attribute is not
mandatory, but optional, as indicated
by its multiplicity expression [0..1].
In addition to the constraints described in this list, there are
the implicit range constraints defined by assigning the datatype
PositiveInteger
to movieId
,
NonEmptyString
to title
, and Date
to releaseDate
. In our plain JavaScript approach, all these
property constraints are coded in the model class within
property-specific check
functions.
You can use the following sample data for testing your app:
Table 8.2. Sample data about movies
Movie ID | Title | Release date |
---|---|---|
1 | Pulp Fiction | 1994-05-12 |
2 | Star Wars | |
3 | Casablanca | 1943-01-23 |
4 | The Godfather | 1972-03-15 |
More movie data can be found on the IMDb website.
The purpose of the app to be built is managing information about
countries. The app deals with just one object type:
Country
, as depicted in the following class diagram.
In this model, the following constraints have been expressed:
Due to the fact that the name
attribute is
declared to be the standard
identifier of Country
, it is mandatory and unique.
The name
attribute has a string length
constraint requiring its values to have at
least 3 and at most 50 characters.
The population
attribute is mandatory, as indicated by the
multiplicity expression [1] appended to the attribute name.
The lifeExpectancy
attribute is also mandatory and has an interval
constraint: its values must be less than or
equal to 100.
Notice that the militaryExpenditure
attribute is not
mandatory, but optional, as indicated
by its multiplicity expression [0..1].
In addition to the constraints described in this list, there are
the implicit range constraints defined by assigning the datatypes
NonEmptyString
to name
,
PositiveInteger
to population
,
PositiveDecimal
to lifeExpectancy
and
Percentage
to militaryExpenditure
(hint: a
percentage value is a decimal number between 0 and 100). In our plain
JavaScript approach, all these property constraints are coded in the
model class within property-specific check functions.
You can use the sample data shown in the following table for testing your app.
Table 8.3. Sample data about countries
Name | Population | Life expectancy | Military expend. (% GDP) |
---|---|---|---|
Germany | 80,854,408 | 80.57 | 1.35 |
France | 66,553,766 | 81.75 | 1.9 |
Russia | 142,423,773 | 70.47 | 3.49 |
Monaco | 30,535 | 89.52 |
More data about countries can be found in the CIA World Factbook.