Architectural Principles
From Gevo
Principles
This covers general architectural principles that should be followed at all levels.
- autonomy: services have control over the logic they encapsulate and can be deployed independently.
- encapsulation: services fully encapsulate all their logic and data whilst hiding the implementation details (locality).
- modularity: ensure that functionally related components are grouped together, but that independent components are grouped separately (separation of concerns).
- loose coupling: services maintain a relationship that minimises dependencies and allows for a degree of freedom in their interactions.
- contract: services adhere to a well defined communications agreement (interface), as defined collectively by one or more service description documents.
- reusability: logic is divided into services with the intention of promoting reuse.
- composability: collections of services can be coordinated and assembled to form composite services.
- statelessness: services minimise retaining information specific to an activity being performed on behalf of another service.
- discoverability: services are designed to be outwardly descriptive so that they can be found and assessed via available discovery mechanisms.
- structure: the above principles should be able to uncover structure at multiple different scales, resulting in depth.
- decentralised co-ordination: large systems are inherently concurrent yet still need to achieve common goals through shared yet localised responsibility and collaboration.
Summary
Structure is built by the interplay of integration and differentiation. In order to support these two processes we need a system that exhibits global behaviour that is the result of interactions between locally behaving subsystems. So we need subsystems that are locally encapsulated and autonomous and via loose coupling, can be composed to interact as larger modules that focus on specific areas of concern. To manage the high degree of concurrency inherent in such systems we need decentralised coordination mechanisms.

