|This documentation relates to an earlier version of General Interface. For the latest version of the documentation go to General Interface Docs.|
The Asynchronous Modular Platform (AMP) is a General Interface framework for building modular and high-performing enterprise-sized General Interface applications. AMP is an optional part of General Interface and is packaged as an add-in. AMP provides the libraries and templates that allow you to easily create extensible and loosely-coupled application components and combine them into a working whole. The design of AMP is inspired by the Eclipse plug-in architecture.
This section describes common pitfalls of General Interface application development and how AMP helps overcome them to improve code quality and manageability.
Component files that are unnecessarily large often contain many objects that are initially invisible and may only become visible during uncommon use cases.
AMP helps manage component files so that they do not burden the overall code base. From the beginning of application development, AMP encourages decomposition of applications into constituent parts.
Dynamic class loading and synchronous resource loading are convenient for developers, but may cause major performance bottlenecks in a deployed application.
AMP makes working with asynchronously loaded resources as easy as working with synchronously loaded ones. By using asynchronous resource loading, developers can avoid the performance problems associated with dynamic class loading and synchronous resource loading. AMP also enforces asynchronous behavior by providing only asynchronous APIs.
Large, successful applications generally use a publish-subscribe pattern to notify application components of a change in application state. Unfortunately, this paradigm typically requires a great deal of boilerplate code, plus careful attention to components as they are added or removed from the application.
AMP allows you to define these types of dependencies declaratively in XML, thereby significantly reducing the amount of required boilerplate code.
It is common for large applications to lack extensibility features. Extending this type of application typically involves both coding the extension and modifying the application. If such an application is extensible, it is because the developer has spent considerable effort to design an extensible framework.
AMP provides a modular framework that is engineered around the needs of extensible General Interface applications. The AMP infrastructure encourages and when appropriate, enforces, the design of application components according to well-defined interfaces that you can extend in the future without modifying the application.
Adding new components can increase design complexity. In a poorly designed system, complexity can increase very rapidly (polynomially) as components are added, because each existing component must be modified to take into account interactions with every new component.
AMP reduces this complexity by encouraging application components to communicate with each other through well-defined interfaces, even for internal system components.
In most application development environments, special care is required to build applications that can be easily tested. Because developers are usually pressed to complete development quickly, they may employ large, monolithic components, and create ad-hoc frameworks that are not designed with testing in mind.
AMP addresses testing concerns by encouraging developers to create modular components and by offering an application framework with generous log coverage and benchmark statistics.