Architecture, what is it?
07 Oct 2022 - Giulio Vian - ~3 Minutes
Definitions are important and when I hear using the term architecture to refer to classes and programming patterns within a program, I find myself uneasy. It’s probably a problem of mine, so I looked at literature and what they say: not an exciting landscape.
Martin Fowler in Software Architecture Guide (martinfowler.com) mentions two definitions:
** the shared understanding that the expert developers have of the system design **
and
** Architecture is about the important stuff. Whatever that is **
not exactly precise definitions (Aristotle where are thou?).
At the beginning
Let’s see if the origin of the term and common uses come to our aid. The second definition we find in the Oxford dictionary is
the complex or carefully designed structure of something.
The Merriam Webster adds a little
formation or construction resulting from or as if from a conscious act or a unifying or coherent form or structure
In my opinion some important elements emerge: the * spatial * aspect (here and there, above and below) and therefore the * relations * between parts (proportions, harmonies, sequences and forces).
When we talk about architecture we think first of all about a building and how it fits into the immediately surrounding space. We certainly do not think about the furniture, which coincidentally we indicate with * interior design * (interior design), or how the walls are frescoed, or the systems. All these things are not the architecture of the building but are directed by it.
This is not a secondary metaphor, because in computer science we have chosen to use this vocabulary instead of another, which I know is a biological metaphor, for which we would speak of organs, systems and organisms.
It is useful to ask ourselves, then, what is the equivalent of a wall structure in computer science.
In pratica
A mio avviso l’equivalente del muro è il confine di un processo, se vogliamo essere precisi la transizione tra user mode e kernel mode. Quando il mio programma si connette ad un database, chiama una API (syscall) per aprire la connessione con un altra macchina; se il database è un file local, il processo dovrà comunque passare dal kernel per aprirlo. Ogni comunicazione significativa, che sia locale alla macchina o distribuita sulla rete, passa sempre dal kernel.
Potremmo quindi dare un criterio molto semplice:
architettura è la descrizione delle interazioni tra due o più processi.
In sintesi
A mio avviso parlare di architettura per quanto avviene all’interno di un processo è quantomeno improprio. Il termine architettura si applica quando descriviamo la distribuzione di un sistema e le sue dipendenze.
What do you think? Am I wrong?