Ci sono odori di architettura?


37

Ci sono tonnellate di risorse sul web che fanno riferimento e elencano gli odori del codice. Tuttavia, non ho mai visto informazioni sugli odori dell'architettura . È definito da qualche parte ed è disponibile un elenco? Sono state fatte ricerche formali sui difetti dell'architettura e sul loro impatto sulla velocità del progetto, i difetti e simili?

Modifica: non stavo davvero cercando un elenco nelle risposte, ma la documentazione (sul web o in un libro) sugli odori dell'architettura.


4
Solo quando l'architetto ha cattive abitudini di igiene personale ...
FrustratedWithFormsDesigner

Non intendevo davvero elencare tutti gli odori qui. Forse un link a un elenco?
C. Ross,

Ross Mi dispiace non essermene accorto. Ho appena aggiunto alcune esperienze.
Amir Rezaei,

@Amir Rezaei il tuo è il migliore del lotto, almeno hai consolidato la tua lista in un post.
C. Ross,

Risposte:


33
  • Architettura a più livelli Quando hai livelli su livelli su livelli su livelli ... vedi il mio punto qui, nella tua applicazione. Lo chiamo Over Layered Architecture
  • Oltre l'astrazione in modo tale che ti perdi nel codice.
  • Architettura futuristica Questo accade quando la soluzione è troppo futuristica. In realtà nessuno può prevedere nuovi requisiti. Pertanto, la maggior parte dell'implementazione futuristica è solo una perdita di tempo e risorse.
  • Tecnologia Entusiasta Architettura L'architetto ha apprezzato la nuova tecnologia e ha messo in produzione. Senza sapere se è stato dimostrato prima.
  • Over Kill Architecture Un semplice problema è stato risolto dal fattore esponenziale delle capacità e della tecnologia dell'architettura.
  • Architettura cloud La chiamo architettura cloud poiché l'architettura non ha alcun legame con il reale. Sono solo dei bei diagrammi di Visio.

Anche la totale mancanza del contrario è vera.

Ecco il link dei primi dieci errori dell'architettura software .


1
Sono d'accordo su questo, ho visto un'applicazione a strati assurda (fino a 9 strati)

7
Architettura Baklava?
Andrew Arnold,

15
ah, il parente stretto del codice spaghetti, mi piace chiamare questo "Codice Lasagna"
GSto

6
Ooh @GSto - Codice spaghetti nell'architettura delle lasagne. L'insieme completo potrebbe essere chiamato "piccola Italia".
glenatron,

2
In alcuni punti application_layers == (developers_assigned - 1) perché qualcuno finisce per diventare il PM.
sal

20

Tutto è configurabile . Quando un architetto ti dice che il suo sistema è a prova di cambiamento o altamente personalizzabile a causa dell'ampia configurabilità, questo è un odore di architettura.

Il problema è che puoi davvero fornire solo meccanismi di configurazione per ciò che pensi che in questo momento dovrà essere configurato, ma una volta che la tua applicazione è in libertà, non sarà sufficiente. Quindi, i meccanismi di configurazione si espandono e si espandono e alla fine si ottiene l'effetto della piattaforma interna.

E poi sei all'inferno del software.


È interessante notare che l'effetto della piattaforma interna è infernale e tuttavia molte persone guardano allo sviluppo orientato alla DSL come Next Big Thing, che secondo me è leggermente interno alla piattaforma.
glenatron,

@glenatron: forse è questo il punto? Perché non gettare la spugna e presumere che accadrà. Quindi puoi sviluppare con il tuo DSL e modificare l'implementazione per gestire più configurazioni.
Jeremy Heiler,

Direi che DSL è come DSL. Questi sono buoni modi e cattivi modi per implementare. Quando penso a come si può fare bene, penso ai tanti DSL che compongono Ruby on Rails. Non implementano la propria lingua - sono solo costrutti all'interno di un programma Ruby, ma astraggono in modo intelligente e utile molti dei dettagli di ciò per cui sono una lingua. Il punto in cui l'IPE inizia davvero a puzzare verso l'alto cielo è quando si passa dal linguaggio specifico del dominio al Lanuage sempre più generalizzato che inizia ad assomigliare molto alla lingua in cui è implementato.
Adam Crossland

Recentemente ho letto di DSL, Jetbrains ha il suo MPS che sembra interessante, ma non riesco ancora a concepirlo. Sostengono di usarlo su alcuni dei loro prodotti, quindi potrei chiedere di vedere quali e come.
Ian,

Voterei questo 100.000.000 di volte se potessi. Se hai mai usato lo strumento di gestione del progetto chiamato Clarity, capiresti perché questa è un'orribile scelta di architettura!
HLGEM,

9

Un database progettato da un ORM! O un back-end di database non relazionale che dovrebbe essere relazionale. O un database in cui si progetta di utilizzare viste che richiamano viste che richiamano viste, non solo sono troppo lente (i database devono essere progettati per le prestazioni dall'inizio non più tardi) ma quando è necessario apportare una modifica, sono orribili da tracciare attraverso (Oltre l'astrazione, come diceva @AmirResaei, è facile perdersi nel codice quando è necessario correggere qualcosa che è in fondo a tutti quei livelli.)


Questo è morto. Purtroppo, sta diventando un problema più grande man mano che l'hardware diventa più veloce. Funziona velocemente su 10 dischi, perché non dovrebbe funzionare con 100.000.000?
Jeff Davis,

4
per me, ORM è odore di architettura.
Christopher Mahan,

3

Odori di codice e odori architettonici sono la stessa cosa. Il codice inizia a "annusare" a causa dell'architettura non ottimale.

Nel libro fondamentale di Martin Fowler sull'argomento, Refactoring , presenta una serie di odori di codice e identifica il modo in cui rimuoverli dal sistema. Refactoring to Patterns di Joshua Kerievsky sottolinea ulteriormente questa idea dando schemi architettonici specifici per correggere vari odori di codice (e come fare il refactoring su di essi passo dopo passo).

La maggior parte del refactoring viene eseguita per alleviare il codice non ottimale tramite un'architettura migliorata. Si potrebbe sostenere che l'unico "odore architettonico" nato naturalmente (diverso da Big Ball of Mud), sarebbe l'architettura BDUF (Big Design Up Front) Architecture. Dove si tenta di accogliere tutto ciò che serve prima che venga scritta la prima riga di codice. Un agile progetto software in cui il design viene eseguito in base alle esigenze (anche io oso dire dove il codice viene trattato come design ), farà crescere organicamente la sua architettura.


1
Punto interessante, puoi fornire un esempio?
Travis Christian,

La codifica intelligente è odore di codice.
Christopher Mahan,

Una risposta che fa una dichiarazione senza sostenere fatti. Rispondi odore?
Evan Plaice,

@EvanPlaice Le mie scuse. Spero che la mia modifica fornisca ulteriori informazioni su come sono arrivato alla mia risposta.
Michael Brown,

@MikeBrown +1 Stavo facendo il miglioramento facciale ma piacevole.
Evan Plaice,

2

(Molti) L'accoppiamento, in qualsiasi forma, è ciò che rende le architetture odorose. Più è accoppiato, più odora.

Detto questo: nessun accoppiamento causa spesso problemi di prestazioni.


1
Non sono d'accordo con quello. Se stai parlando di applicazioni aziendali, l'accoppiamento a un database che è altamente improbabile che cambi è intelligente, non stupido. È possibile utilizzare la funzionalità più prestazioni specifiche del database.
HLGEM,

+1 ma YMMV. Usare con cautela.
Michael K,

1
Ecco perché ho aggiunto "nessun accoppiamento spesso annusa problemi di prestazioni". Sono d'accordo che è necessario utilizzare l'accoppiamento per migliorare le prestazioni. È quando c'è un sacco di accoppiamento ovunque (tra i diversi moduli / classi / qualunque sia la tua applicazione) che c'è un problema architettonico.
Klaim,

2

Ecco un odore concreto di architettura / design che incontro continuamente: analisi e reportistica direttamente da un database transazionale.

Questo è certamente OK in alcune situazioni (es. Report leggeri), ma in molti casi i requisiti di reportistica ed elaborazione transazionale sono in conflitto. Tuttavia, poiché è la cosa semplice / economica da fare, i report vengono eseguiti direttamente dal DB transazionale. Ciò provoca ogni sorta di mal di testa su entrambi i lati dell'equazione.

Questo è generalmente presente nelle app LOB aziendali, tra l'altro. Capisco che molte PMI non hanno le risorse o il know-how per creare magazzini e datamart (dimentica i cubi o le impostazioni di riduzione delle mappe), ma molte organizzazioni più grandi con cui ho lavorato hanno gli stessi problemi.

Durante la progettazione di un sistema, l'architetto dovrebbe davvero essere consapevole del fatto che i report, in particolare i report di analisi, e i requisiti transazionali sono trattati al meglio come problemi separati e non solo raggruppati a livello di database.


0

Non sono sicuro che ciò si adatti a livello di architettura, ma se vedo un gruppo di classi / moduli manager in quello che dovrebbe essere un progetto OO, questa è una garanzia che l'unica persona che capirà l'architettura / design è l'architetto / designer stesso senza molte spiegazioni / apprendimenti da parte di altri.


0

Ci sono molti odori di architettura documentati dalla comunità. Un set che si verifica comunemente è il seguente.

  • Dipendenza ciclica: questo odore si presenta quando due o più componenti dell'architettura dipendono l'una dall'altra direttamente o indirettamente.
  • Dipendenza instabile: questo odore si presenta quando un componente dipende da altri componenti che sono meno stabili di se stesso.
  • Componente divino: questo odore si verifica quando un componente è eccessivamente grande in termini di LOC o numero di classi.
  • Concentrazione delle caratteristiche: questo odore si verifica quando un componente realizza più di una preoccupazione / caratteristica architettonica.
  • Funzionalità sparse: questo odore si presenta quando più componenti sono responsabili della realizzazione della stessa preoccupazione di alto livello.
  • Struttura densa: questo odore si presenta quando i componenti hanno dipendenze eccessive e dense senza una particolare struttura.

Di recente ho preparato una tassonomia degli odori . Attualmente, documenta 38 odori di architettura e oltre 260 odori di codice totali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.