Composer is an extensible Compositional Architecture framework, providing a set of functionality such as Inversion of Control container (IoC), Dependency Injection (DI), Plug-in framework, Aspect Oriented Programming (AOP), Configurability and Composability for components.
Composer is a framework to enable software to be developed in a Compositional manner. A complete software system can be formed by composing various smaller re-usable parts together. It simplifies the software development process, and help developers and architects meet design goals such as Configurability, Extensibility, Reusability and Customizability.
The items below are high-level benefits of building software in Compositional architecture, which is provided by Composer.
- Inversion of Control: Composer can act as a container for Inversion of Control.
- Dependency Injection: Composer can inject dependencies of components either created by composer itself, or created outside and handed over to it.
- Interception and Filtering: Composer facilitates means for intercepting calls between components, filtering them, or redirecting them.
- Dynamic Mocking: Composer has tools for dynamically creating implementations of interfaces.
- Aspect Oriented Programming: Composer facilitates easy creation of Aspects between layers.
- Extensibility: Composer provides means for building extensible software components quickly and easily.
- Plug-in framework: Composer makes it easy to incorporate plug-in functionality in an application.
- Configuration: Composer allows software components declare configuration options, which can be provided from flexible sources without the knowledge of the component itself.
- Customizability: Composer makes customizing software for different customer much easier.
- Reusability: Composer enables easier re-use of software components across different products, and across customizations of the same product.
- Substitutability: Composer makes individual components easily substitutable, without affecting other parts of the system.
- Testability: Composer makes it easy to isolate a single component or a group of components for testing.
- Instance Sharing: Composer can keep track of instantiated components, and share the instance for different uses to prevent unneeded object creations.
- Lazy Initialization Composer makes it easy to defer instantiation of components until when they are actually needed.
- XML Based composition: Composer has utilities to parse XML documents that specify the composition and registration of components.
- Extend Composition Logic: Composer is extensible itself, allowing you to customize and add your own logic to the composition flow in several ways.