An application component is a self-contained, reusable piece of functionality that contributes a piece of user-interface to the desktop. An application component consists of the component (an implementation of IApplicationComponent) and a corresponding view (an implementation of IApplicationComponentView). The primary responsibility of the component is to encapsulate the domain logic and act as a presentation model (see Fowler) for the view. Hence, the application component plays the role of the model in the model-view paradigm. The view is kept as thin and unintelligent as possible.
An application component executes inside of a host (an implementation of IApplicationComponentHost). The host provides the component with an interface to the environment in which it is executing.
The relationship between component, view and host is shown below:

Note that the view knows about the component but the component does not know about the view. The relationship between the component and host is bi-directional.
As mentioned in the previous section, the Workspace, Shelf and DialogBox classes all serve as application component hosts. (Note: Workspace does not itself implement IApplicationComponentHost – the host interface is implemented by an inner class, a reference to which is passed to the component. In general, this pattern holds. You will never see a top-level class implement IApplicationComponentHost, since the interface is intended specifically as a callback for the component, and there is no reason for it to be exposed externally).
Additionally, application components can be hosted within other application components. An application component that is designed to act as a host to other application components is called an Application Component Container, and derives from the abstract class ApplicationComponentContainer.
An example of such a component is the NavigatorComponentContainer class, which hosts any number of application components as “pages” that can be navigated by the user via a tree-control sidebar.
The diagram below shows the Application Component Containers that are built in to the desktop.
