Architectural Styles

Nikunj R. Mehta

An architectural style is a collection of constraints on components, connectors, and their configurations targeted towards a family of systems with shared characteristics. Styles also influence architectural evolution by restricting the possible changes an architect is allowed to make. Examples of styles include pipe and filter, blackboard, client-server, GenVoca, C2, and REST. Styles are often developed systematically to solve difficult architectural problems; some styles are the result of insights gained from diverse areas of computer science. Most styles originate when novel classes of software systems are being designed or existing systems are being adapted to unforeseen circumstances and/or environments. Often new styles are produced by changing some aspects of an existing style, or by combining characteristics of multiple existing styles.

When designing a software system, selection of appropriate architectural style(s) becomes an important determinant of the system's success. A systematic understanding of the similarities and differences between different architectural styles is needed to select the most appropriate style for the needs of a given software system To date, few attempts have been made to provide architectural style comparison and selection tools. These attempts include preliminary efforts to define the underlying characteristics of styles and insights into the process of creating a new architectural style. However, these studies fail to provide a systematic basis for developing a novel architectural style that can meet a set of architectural requirements. Additionally, these studies do not provide enough guidance to designers for creating implementation-level support for architectural styles, thus reducing the utility of styles to conceptual tools for modeling a software system.

We have applied results from the creation of a composition framework for architectural styles to a number of styles including C2, client-server, pipe-and-filter and push-based. We have created Alloy based formal models for these styles as well as implemented these models using Java to create style implementation infrastructures. Finally, we have used these style infrastructures to create various applications.

We have also proposed the requirements for a self-healing architectural style: adaptability, dynamicity, awareness, observability, autonomy, robustness, distributability, mobility, and traceability. These requirements are then studied from the perspective of five dimensions of architectural styles identified in Alfa, namely structure, topology, behavior, interaction and data. As an illustration of this characterization, we have studied a specific style called Prism.