The Domain is more involved than other layers of the model. The breadth of its classes is determined by the breadth of the problem the application addresses, which can sometimes be enormous. In addition, for each Domain class there may be one of each of the following:
- A factory for creating objects of the given type,
- A proxy for the given type,
- A collection of the given type, and
- A proxy for each collection.
Besides the Domain objects and their associates, the Domain namespace also has:
- An abstract domain superclass with common domain features, and
- The ‘domain watcher’, which is an implementation of the identity map pattern.