|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- ---
- title: Overview
- order: 1
- layout: page
- ---
-
- [[datamodel.overview]]
- = Overview
-
- The Vaadin Data Model is one of the core concepts of the library. To allow the
- view (user interface components) to access the data model of an application
- directly, we have introduced a standard data interface.
-
- The model allows binding user interface components directly to the data that
- they display and possibly allow to edit. There are three nested levels of
- hierarchy in the data model: __property__, __item__, and __container__. Using a
- spreadsheet application as an analogy, these would correspond to a cell, a row,
- and a table, respectively.
-
- .Vaadin Data Model
- image::img/datamodel-whitebg.png[]
-
- The Data Model is realized as a set of interfaces in the
- [classname]#com.vaadin.data# package. The package contains the
- [classname]#Property#, [classname]#Item#, and [classname]#Container# interfaces,
- along with a number of more specialized interfaces and classes.
-
- Notice that the Data Model does not define data representation, but only
- interfaces. This leaves the representation fully to the implementation of the
- containers. The representation can be almost anything, such as a plain old Java
- object (POJO) structure, a filesystem, or a database query.
-
- The Data Model is used heavily in the core user interface components of Vaadin,
- especially the field components, that is, components that implement the
- [classname]#Field# interface or more typically extend
- [classname]#AbstractField#, which defines many common features. A key feature of
- all the built-in field components is that they can either maintain their data by
- themselves or be bound to an external data source. The value of a field is
- always available through the [classname]#Property# interface. As more than one
- component can be bound to the same data source, it is easy to implement various
- viewer-editor patterns.
-
- The relationships of the various interfaces are shown in
- <<figure.datamodel.overview.relationships>>; the value change event and listener
- interfaces are shown only for the [classname]#Property# interface, while the
- notifier interfaces are omitted altogether.
-
- [[figure.datamodel.overview.relationships]]
- .Interface Relationships in Vaadin Data Model
- image::img/datamodel-interfaces-hi.png[]
-
- The Data Model has many important and useful features, such as support for
- change notification. Especially containers have many helper interfaces,
- including ones that allow indexing, ordering, sorting, and filtering the data.
- Also [classname]#Field# components provide a number of features involving the
- data model, such as buffering, validation, and lazy loading.
-
- Vaadin provides a number of built-in implementations of the data model
- interfaces. The built-in implementations are used as the default data models in
- many field components.
-
- In addition to the built-in implementations, many data model implementations,
- such as containers, are available as add-ons, either from the Vaadin Directory
- or from independent sources. Both commercial and free implementations exist. The
- JPAContainer, described in
- <<dummy/../../../framework/jpacontainer/jpacontainer-overview.asciidoc#jpacontainer.overview,"Vaadin
- JPAContainer">>, is the most often used conmmercial container add-on. The
- installation of add-ons is described in
- <<dummy/../../../framework/addons/addons-overview.asciidoc#addons.overview,"Using
- Vaadin Add-ons">>. Notice that unlike with most regular add-on components, you
- do not need to compile a widget set for add-ons that include just data model
- implementations.
|