Skip to content

Latest commit

 

History

History
37 lines (21 loc) · 2.77 KB

9.design_principles.md

File metadata and controls

37 lines (21 loc) · 2.77 KB

9. Design Principles

The Open Application Model follows a set of design principles that ensure the clarity, richness, and extensibility of the model.

Separation of Concerns

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.

Runtime Neutrality

The Open Application Model is runtime-agnostic. It does not assume any runtime-specific features. Instead, it aims to provide a common vocabulary for application owners and operators to describe desired topologies and behaviors independent from any specific platforms.

Balance (Elegance)

While ensuring separation of concerns, OAM seeks to avoid unnecessary complexity to users 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.

Reusability

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 prevent "lock-in" conditions.

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

Application Models Are Not Programming Models

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