Quando formalizzi l'architettura del sistema, è importante capire non solo il valore che sta dietro l'architettura, ma anche capire e apprezzare ciò che dovrebbe essere.
Gli obiettivi principali dell'architettura software o tecnica sono identificare i requisiti non funzionali realizzati dal Attributi di qualità che guideranno Architettura di sistema .
Requisiti non funzionali:
A non-functional requirement is a requirement that specifies criteria
that can be used to judge the operation of a system, rather than
specific behaviors. They are contrasted with functional requirements
that define specific behavior or functions. The plan for implementing
functional requirements is detailed in the system design. The plan for
implementing non-functional requirements is detailed in the system
architecture.
Broadly, functional requirements define what a system is supposed to
do and non-functional requirements define how a system is supposed to
be. ... Non-functional requirements are often called "quality attributes" of a system. Other terms for non-functional requirements are "qualities", "quality goals", "quality of service requirements", "constraints" and "non-behavioral requirements"
Naturalmente identificare i requisiti architettonicamente significativi ha senso quando si lavora su un progetto greenfield, tuttavia quando si lavora con software esistenti, è meglio essere il più disciplinati possibile. Non vorrai che la tua architettura software sia influenzata dal sistema esistente.
L'architettura del software per essere autorevole ha davvero bisogno di essere 3 cose.
dichiarativa
Questa è la parte della documentazione in cui dichiari NOT WHAT IS, ma come dovrebbero essere le cose. Lo facciamo attraverso l'uso di varie viste architettoniche del sistema. Definiamo i componenti che dovrebbero essere, il modo in cui interagiscono e quindi eseguiamo il drill-down facoltativo in ogni componente per ottenere visualizzazioni più granulari che dichiarino come deve essere progettato il sistema.
Questa è una distinzione importante. Il System Design dovrebbe essere vincolato dall'architettura di sistema, sono in effetti cose separate ma correlate.
Motivazioni
La logica dell'architettura del software è ciò che fornisce legittimità e autorità alle decisioni sull'architettura che sono state prese. Forse è stata presa la decisione di utilizzare un listener di eventi Pub / Sub su MQ per l'attivazione di un lavoro batch e lo si disegna?
Perché è stata presa questa decisione? Spieghiamo perché nella sezione Rationale e colleghiamo la nostra spiegazione ai requisiti non funzionali, agli obiettivi degli attributi di qualità o ai requisiti significativi dal punto di vista dell'architettura. Ad esempio, i lavori devono essere asincroni e ripetibili, la manutenibilità come attributo di qualità determina che in caso di un errore del processo batch i lavori possono essere riavviati tramite un messaggio MQ, il sistema deve avere una perdita di messaggi zero con comunicazione asincrona, ecc. ..)
Rischi
Ora che hai dichiarato come dovrebbe essere l'architettura e lo hai dimostrato con il tuo Razionale, ora puoi identificare Rischi sullo stato corrente del sistema dove non è rispettato.
(Ad esempio, la convalida lato server viene duplicata sul codice Javascript lato client. Si tratta di una violazione del principio DRY e ciò contrasta con l'attributo di qualità di manutenibilità.Non ci sono requisiti non funzionali definiti intorno alle prestazioni in questo area quindi non esiste una logica per il comportamento attuale del sistema)
I tuoi rischi possono anche rappresentare il diagramma in cui lo stato corrente sta attualmente scostandosi dall'architettura. Questi rischi possono essere affrontati dal team di sviluppo ora, sia attraverso il loro piano di progetto o aggiungendo questo nel backlog.