A domain represents a set of member values, and defines a list of attributes for its members. Each attributes itself has an associated domain. For example, date is a domain and one of its attributes is year. The domain of the year attribute is integer. In addition to algorithmic domains like date and integer, Bach includes the SqlTable class for domains representing the rows of a relational database table.
Domains also specify default fields, forms, and reports for depicting members of the domain.
Fields are widget classes that can take on any value from their assigned domain. All fields provide methods for storing, retrieving, and validating their value. Forms are mega-widget classes containing one or more fields. A simple form layout can be generated automatically, or an intricate layout can be specified explicitly. The Report class provides the basis for generating HTML formatted reports.