Goals and Benefits

Retired Content

This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.

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

Architectural Goals

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

  • Create a complex WPF application from modules that can be built, assembled, and optionally deployed by independent teams.
  • 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:

  • Allow different teams to create modules that can be independently deployed to a client machine.
  • Allow developers to easily implement WPF 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 Controller pattern.
  • Allow cooperating modules to contribute and use shared infrastructure components.
  • Allow the shell that hosts the modules to determine the appearance of shared module elements.

Give developers the ability to use pieces of the Composite Application Library without having to use the entire library.

  • Allow the Composite Application Library to integrate into existing WPF applications.
  • Allow extensibility for customizing its behavior for special or uncommon scenarios.

The 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.

Benefits

Developers can use the Composite Application Library to develop WPF 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).

Modularity

The Composite Application Library promotes modularity by allowing you to 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 details on modularity, see Module technical concept.

User Interface Composition

The Composite Application Library promotes user interface composition by allowing you to 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 that commands and events to also be loosely coupled.

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

Extensibility

The Composite Application Library provides the foundation for building WPF 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 on 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.

Organization of the Composite Application Library

The Composite Application Library consists of three assemblies:

  • Microsoft.Practices.Composite. This assembly contains interfaces and components to help build composite applications that are not specific to a user interface technology. These components include the EventAggregator, TraceLogger, ModuleLoader, StaticModuleEnumerator, ConfigurationModuleEnumerator, and DirectoryLookupModuleEnumerator.
  • Microsoft.Practices.Composite.Wpf. This assembly contains interfaces and components to help build composite applications that are specific to WPF. These components include CompositeCommand, DelegateCommand, CompositeWpfEvent, and RegionManager.
  • Microsoft.Practices.Composite.UnityExtensions. This assembly provides components to use the Unity Container Application Block with the Composite Application Library for WPF. These components include UnityBootstrapper and UnityContainerAdapter.
Retired Content

This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.