In "Architectural Styles and the Design of Network-based Software Architectures" thesis, author talks of Architectural Styles.
An architectural style is a coordinated set of architectural constraints that restricts the roles/features of architectural elements and the allowed relationships among those elements within any architecture that conforms to that style.
The styles are categorized into five categories,
1. Data-flow styles
- a. Pipe and Filter (PF)
- b. Uniform Pipe and Filter (UPF)
- a. Replicated Repository (RR)
- b. Cache ($)
- a. Client-Server (CS)
- b. Layered System (LS) and Layered Client-Server (LCS)
- c. Client-Stateless-Server (CSS)
- d. Client-Cache-Stateless-Server (C$SS)
- e. Layered-Client-Cache-Stateless-Server (LC$SS)
- f. Remote Session (RS)
- g. Remote Data Access (RDA)
- a. Virtual Machine (VM)
- b. Remote Evaluation (REV)
- c. Code on Demand (COD)
- d. Layered-Code-on-Demand-Client-Cache-Stateless-Server (LCODC$SS)
- e. Mobile Agent (MA)
- a. Event-based Integration (EBI)
- b. C2
- c. Distributed Objects
- d. Brokered Distributed Objects
However this is not the only abstraction. Lifetime Objectives and Lifetime design is another abstraction practiced by some. These are set of objectives and architectural concerns that are assumed to be true for entire lifetime of the architecture being created. Could we categorize architectures based on this? This is for a future writeup.
In many cases and mostly with me, the architecture comes with a simple underlying thought/strategy. A very simple statement that defines not the architecture but the direction of architecture. Let me call that as architectural inspiration. This is an overly simplified of universe in discourse, the domain world. Some of the architectural inspirations are, (replace world with everything)
1. World consists of objects. Objects have behavior and data.
2. World is made up of resources. Resources can be identified by URIs and accessed by a protocol.
3. World is only about services. Discover a service, use it and forget it.
4. World is a language. The language is understood by a platform and job of software development is to describe problem in the language.
No comments:
Post a Comment