## Domain

## Definition

A domain is a field of interest or knowledge [1][3].

## Motivation

A domain is characterized by the relevant objects (a.k.a. concepts) and their relationships. The relevance is relative to the problem at hand, and the decision of whether or not certain objects and relationships are relevant is made by the team who analyzes the domain in the context of a problem, which needs a solution (a.k.a. "Analysts.") [2]. A domain is scoped to maximize the satisfaction of the requirements of its stakeholders, it includes a set of concepts and terminology understood by practitioners in that area, and includes the knowledge of how to build software systems (or parts of software systems) in that area [1].

Examples of types of domains:

- Business: focus on enterprise viewpoint (e.g., finance, aeronautics),
- Methodology: focus on development process viewpoint (e.g., OMG's SPEM),
- Technology: focus on software viewpoint (e.g., language, platform description),
- Non-functional: focus on qualities of development (e.g., quality of service, architecture description).

Domains can be quite large, for instance "Medical", "Legal". They can also be arranged in some hierarchical structure. For instance, the domain associated with the problem of finding immunizations for rapidly changing human viruses would be a sub-domain of "Medical" [2].

## Structure

A domain user speaks with words of the domain language. This language has a syntax and semantics. A model characterizes a domain in capturing the syntax and semantics of this language domain. For short, we generally use the expression "domain model" but we always must keep in mind this relationship between a domain, a model and a language.

Figure 1. Relationship between domain, model and language

[1] Czarnecki, K., and Eisenecker, U.W., Generative Programming, Addison-Wesley, 2000.
[2] Sánchez-Ruíz, A., Saeki, M., Langlois, B., Paiano, R., Domain-Specific Software Development Terminology : Do we All Speak the Same Language?, Proceeding of the 7th OOPSLA Workshop on Domain-Specific Modeling, 2007.
[3] Stahl, T., Volter, M., Bettin, J., Haase, A., Helsen, S., Model-Driven Software Development, Wiley, 2006.