Arquitectura de Software
Arquitectura de Software
A set of semantic constraints (e.g., filters in a pipe-and-filter style are pure data trans-
ducers—they incrementally transform their input stream into an output stream, but
do not control either upstream or downstream elements).
Mary Shaw and David Garlan’s influential work attempted to catalog a set of archi-
tectural patterns that they called architecturalstyles or idioms. This has been evolved by the
software engineering community into what is now more commonly known as architectural
patterns, analogous to design patterns and code patterns.
The motivation of [Shaw 96] for embarking on this project was the observation that
high-level abstractions for complex systems exist but we do not study or catalog them, as is
common in other engineering disciplines.
1
These patterns occur not only regularly in system designs but in ways that sometimes
prevent us from recognizing them, because in different disciplines the same architectural
pattern may be called different things. In response, a number of recurring architectural
patterns, their properties, and their benefits have been cataloged
constraints that define how elements can be integrated to form the system
attributes that describe the advantages and disadvantages of the chosen structure
For example, in the data-centric style, the data store plays a central role and it is ac-
cessed frequently by other elements that modify data. In the dataflow style, input data is
transformed by a series of computational or manipulative elements. In the call-and-return
style, functions and procedures are the elements organized in a control hierarchy with a main
program invoking several subprograms. In the object-oriented style, elements are represented
as objects that encapsulate data and operations, and the communication among them is by
message passing. In the layered style, each module or package completes tasks that progress
in a framework from higher-level abstractions to lower-level implementations. All of these
styles will be discussed in detail in later chapters.
For now, let us take a look at the multi-tier architecture style in detail. Multi-tier archi-
tecture is commonly used for distributed systems. It usually consists of three element types:
client, middleware server, and data server.
Each element type serves a distinct function. The client element is responsible for GUI
interface presentation, accepting user requests, and rendering results. The middleware ele-
ment gets the requests from the client element, processes the requests based on the business
logic, and sends a data request to the back-end tier. The data store server element manages
data querying and updating. All three types of elements are connected via a network (e.g.,
the Internet). Many enterprise software architectures are of the multi-tier style because they
2
share the same set of constraints.
Why are architecture styles so important? Because each style has a set of quality
attributes that it promotes. By identifying the styles that a software architecture
design supports, we can verify whether the architecture is consistent with the
requirement specifications, and identify which tactics we can use to better implement
the architecture.
In most cases, a software system has its own application domain such as image proces-
sing, motor control, Web portal, expert system, or mail server. Each domain may have its
own reference model. For instance, the Model-View-Controller (MVC) is widely adopted by
designers of interactive systems. Such a reference model partitions the functionalities of a
system into subsystems or software components.
In many cases, a system can adopt heterogeneous architectures, i.e., more than one
architecture style can coexist in the same design. It is also true that an architecture
style maybe applied to many application domains.
Note that both the building blocks and the connectors of a style are mostly realized as
independent building blocks of an architecture or a system.
3
An architecture style primarily reflects the fundamental structure of a software system
and its properties. You can therefore use a style to categorize architectures. Furthermore,
you can use styles to understand the consequences of a fundamental architecture and its
variants.
Many of the architecture styles documented by Shaw and Garlan have also been docu-
mented in the form of architecture patterns. For this reason, and because the concept of
architecture styles is very similar to the concept of patterns, in the field of architecture you
can use the terms “styles” and “patterns” synonymously.
Shaw and Garlan have cataloged some frequently used architecture styles. These are
summarized and divided into categories (Figura 1)
4
3.3. Architecture Patterns
Architecture patterns in software engineering
Over the last years, patterns have become an important instrument for software develo-
pers and architects, particularly in the area of object orientation. In particular, the Gang
of Four book (GoF) [Gamma et al. 1995], which is concerned with design patterns, and the
POSA books [Buschmann et al. 1996; Schmidt et al. 2000], which deal with software ar-
chitecture patterns, have made important contributions here. However, patterns also occur
in many other areas of software development: for example, patterns for the analysis of do-
mains [Fowler 1996], patterns for domain-driven design [Evans 2004], patterns for software
organization [Coplien and Harrison 2004], or pedagogical patterns [Fricke and Völter 2000].
A pattern is a three-part rule which expresses the relationship between a certain con-
text, a problem, and a solution.
Each pattern is a three-part rule that expresses the relationship between a certain
context, a certain system of forces which occurs repeatedly in that context, and a
certain software configuration which allows these forces to resolve themselves.
As the architect you should know the central design and architecture patterns as these
represent the typically recurring solutions to the recurring problems in software architecture
in general. You should also have a good knowledge of the design patterns and architecture
patterns of the concrete technical and non-technical domains in which you are active. This is
5
important as it enables you to solve problems of the same kind without having to “reinvent
the wheel.” Patterns are therefore a means of passing on established knowledge.
Patterns thus give architects and developers a common vocabulary to enable them to na-
me recurring architecture structures. Once you have a deep knowledge of the central patterns
in a domain, you will quickly see that these patterns frequently recur in given architectures.
Therefore, patterns are also an important instrument for documenting and discussing soft-
ware architectures. They enable you to recognize and name the common features in recurring
architectural structures.