Domain engineering and application engineering are complementary,
interacting, parallel processes that comprise a model-based, reuse-oriented
software production system. An application
engineering process develops software products from software assets created
by a domain engineering process.
The focus of application engineering is a single system whereas the focus of
domain engineering is on multiple related systems within a domain. Typical
application engineering activities include using:
- a domain model to identify customer requirements,
- a generic design (design model) to specify a product configuration
- a partitioning strategy and coordination model (architecture style) to
guide custom development
- application generators and software components to produce application code
Domain engineering is the embodiment of the principle of design-for-reuse
whereas application engineering is the embodiment of the principle of
design-with-reuse.
In the example of the Object Connection
Architecture (OCA), domain engineering processes have been defined for
taking information from the domain model and transforming it into
design and
code units (at varying degrees of
completeness). The application engineering process defines how these assets are
used as the building blocks for the development
of applications in the domain.