The application model follows a few design principles that ensure the clarity, richness, and extensibility of the specification.
Separation of Concerns is the design philosophy in which architectural choices are made with reference to the discrete problems being solved. Divisions in artifacts like "component" and "application", or "schematics" and "configuration" are made by dividing along functional or behavioral lines. By identifying roles and responsibilities of various groups of users, the spec is divided into concepts that match the problem space.
The Open Application Model is platform-agnostic. It doesn’t assume any platform-specific features. Instead, it focuses on offering a vocabulary for application developers and operators to describe desired topologies and desired behaviors independent from any specific platforms.
While ensuring separation of concerns, OAM seeks to avoid unnecessary complexity to developers who take on multiple roles in smaller teams. Simple scenarios should be achievable with minimal investment of time and energy, but complex scenarios should be accommodated without requiring re-platforming.
OAM offers multiple abstraction layers so that operational concerns can be captured independently of developer concerns.
Components in the OAM schematics are designed to be re-usable and shareable. In addition, they remain independent of the code that they describe, making it possible to re-use the code (containers), and preventing "lock-in" conditions.
The spec as a whole is designed to provide application "distributions" where the same application can be executed on different platforms without alteration. This portability of the application is intended to make the following scenarios not just possible, but easy:
- Transferring an application from a developer workstation to a production cluster or service
- Migrating from one implementation to another with no code changes
- Creating marketplace-like environments where applications can be deployed onto customer platforms
There is a clear distinction between an application model and a programming model. An application model describes the composition of an application and the topology of its components. It is not concerned with how each component is implemented (language, design patterns, etc).
On the other hand, a programming model describes how an individual piece of software is composed. It is used by a developer to implement application components. The Open Application Model offers an application model that does not have any requirements of a programming model.
Previous |
---|
8. Practical Considerations |