# 📝Domain model

In software architecture, it is useful to describe a domain model. Domain model is what’s true about the domain regardless of your solution. (Solution is the subject of Design model.)

The following views/models can be used:

*Information model*—describes what types exist and what their relationship is. Either textual or very simple diagram with 1-to-many relationships. Fairbanks_{2010}Note that “types” here refer to real-world objects, not types in your programming language.

*Invariants*(what’s always true, constraints) can be added to information model.*Snapshot*or*instance*diagram—a concrete instantiation of information model. Fairbanks_{2010}*Functionality scenarios*—describe how one snapshot transforms into another. (Similar to use cases.) Fairbanks_{2010}(If a step does not show a transformation in snapshot, consider if the step is necessary.)

Again, it is important to mention that these scenarios are about real world and not the system.

See also: