Integration is the process of programmatically linking your system with others.
Extension is the process of adding new functionality to your system through well-defined approaches, such as plug-in architectures.
Integration and extension enable your customers to create the product they seek. As a bonus, it creates tighter customer relationships and decreases the likelihood that a customer will leave you for a competitor.
The layered architectural pattern, which organizes various system functions in logical and physical layers, provides several excellent choices for integration and extension in enterprise-class software systems. The primary layers of a layered architecture are
- User interface
- Services
- Domain model
- Persistent data
Sublayers may exist within these layers, and other layers may be created to handle specialized requirements.
Whatever the structure of your architecture, build it in spikes that is, user-visible functionality driven through all layers or subsystems.
There are several ways to provide integration and extension points at the services and domain model layers. For example,
- Programmatic techniques, such as exposing an API
- Registration techniques, such as creating a plug-in architecture (like a Web browser)
Integration and extension of persistent data can be accomplished through
- Views
- Hook tables
- Spreadsheet pivot tables
- Extract, transform, and load (ETL) scripts
The business ramifications of applications that can be extended and/or integrated include
- A professional services organization to guide your customers in these activities
- Training programs to ensure that your customers understand how to do this on their own
- Certification programs to create an ecosystem associated with your application
- A community of users around your application
- License agreements that explicitly support integration and extension
Any customer- facing method for integrating and/or extending your application must be carefully managed. You're making a public commitment to stability. Honor it.