Goals and Benefits

This topic provides an overview of the goals and benefits of using the Composite Application Library.

Architectural Goals and Principles

The following table lists, approximately in priority order, the architectural principles that have been prioritized by the Composite Application Guidance team's customer advisory board. These principles determine how the guidance was developed and what the focus areas were.




This is the ability to adopt a portion of the Composite Application Library. You can choose only certain capabilities, incrementally adopt capabilities, and enable or disable features.


This is the ability to quickly learn how to build composite applications using the Composite Application Library. With small digestible and independent capabilities, you can start building your applications faster.


This is the ability to enhance, extend, or replace pieces of the framework without requiring you to redesign the framework or your application.


This means you can adopt the Composite Application Library for an existing application and you can use it with other existing infrastructure. Core services are swappable.


This means the Composite Application Library is designed in a minimalist way to reduce the amount of complexity. The Composite Application Library strives for the simplest approach to get the job done.


The reference implementation in the Composite Application Guidance provides an implementation for Separated Presentation patterns. These patterns allow UI logic to be tested.


The Composite Application Library minimizes overhead while the application is running.


The application can scale to support increased load.


Existing WPF or Silverlight applications can be upgraded to use the Composite Application Library.

Architectural Goals

The Composite Application Library is designed to help architects and developers achieve the following objectives:

  • Create a complex application from modules that can be built, assembled, and, optionally, deployed by independent teams using WPF or Silverlight.
  • Minimize cross-team dependencies and allow teams to specialize in different areas, such as UI design, business logic implementation, and infrastructure code development.
  • Use an architecture that promotes reusability across independent teams.
  • Increase the quality of applications by abstracting common services that are available to all the teams.
  • Incrementally integrate new capabilities.

Design Goals

The Composite Application Library is designed to support the following extensibility and developer productivity objectives:

  • Different teams can create modules that can be independently deployed to a client computer.
  • Developers can easily implement WPF or Silverlight user interfaces that use patterns to separate user interface design code from business logic, such as the Presentation Model pattern and the Model-View-Presenter with Supervising Presenter pattern.
  • Cooperating modules can contribute and use shared infrastructure components.
  • The shell that hosts the modules can determine the appearance of shared module elements.

Developers can use pieces of the Composite Application Library without using the entire library.

  • The Composite Application Library can integrate into existing WPF or Silverlight applications.
  • The Composite Application Library is extensible so you can customize its behavior for special or uncommon scenarios.

The Composite Application Library helps achieve these design objectives through the following strategies:

  • It uses dependency injection techniques to simplify the code necessary to implement the Presentation Model and Model-View-Presenter patterns.
  • It provides a module loading infrastructure and allows modules to perform startup operations. Modules can also register shared components for use by other modules or the shell application.
  • It includes an extensive set of unit tests with the source code. Developers can modify the library and use the test to verify its functionality.
  • It separates the interface and implementation for the library services.

It provides ClickOnce deployment for independent modules.


Developers can use the Composite Application Library to develop WPF or Silverlight applications that are composed of independent, but collaborating, modules. This allows developers or teams to concentrate on specific tasks. For example, developers of service components can focus on the business logic in the component; they do not have to be concerned with background issues, such as the appearance of the application.

Applications built with the Composite Application Library have a loosely coupled design that clearly separates user interface constructs (such as views, menu items, and toolbars), infrastructure components (such as logging, exception handling, authentication, or authorization), and business logic (such as the user interface logic, entities, and service agents of the specific application).


The Composite Application Library promotes modularity; this means you can implement business logic, visual components, infrastructure components, presenter or controller components, and any other objects the application requires, in separate modules. Developers can easily create the UI and implement business logic independently of each other.

For more information about modularity, see the Module technical concept.

User Interface Composition

The Composite Application Library promotes user interface composition; this means you can implement visual components from various loosely coupled visual components, known as views, which may reside in separate modules. The visual components may display content from multiple back-end systems. To the user, it appears as one seamless application.

The Composite Application Library helps you compose commands and create events that are executed across modules using a loosely coupled approach. Composing a user interface of loosely coupled views across modules usually requires commands and events to also be loosely coupled.

For more information about the user interface composition, see the following:


The Composite Application Library provides the foundation for building WPF and Silverlight applications; its design promotes extensibility in many different ways. With it, you can do the following:

  • Replace the services and strategies provided as defaults (such as the way in which modules are loaded) with your own implementations.
  • Add custom services and behaviors as required by your applications.
  • Use your own container or logging service.

For more information about extensibility, see Customizing the Composite Application Library.

Adoption Experience

The Composite Application Library was designed in such a way that you can take the services you need to help solve your problem without having to use the entire library. For example, if you need to support a decoupled communication scenario, you can take the EventAggregator service without using any of the other services provided by the library.

More Information

To learn more about the design and use of the Composite Application Library, see the following topics:

Home page on MSDN | Community site