architetture agili


8

sto iniziando la mia tesi di laurea e il soggetto sarà "architetture agili"

Fondamentalmente, si inizierà con una descrizione di methologies sviluppo software tradizionali, e la conseguente nascita di metodologie agili, per finire con le raccomandazioni e una progettazione di un'architettura applicativa flessibile facilmente adattabile ai cambiamenti inerenti alla costruzione del software.

La mia domanda è: quali modelli e pratiche di progettazione consiglieresti per tale architettura? Mi interessano gli schemi che consentono la massimizzazione del disaccoppiamento di classe come l'iniezione di dipendenza, l'alta capacità di manutenzione e la massima astrazione dal problema specifico.

7

vi consiglio il seguente:

  1. Pattern Repository
  2. Specification modello
  3. Dependency Injection
  4. Domain Driven Design

Fondamentalmente tutto il pubblico ALT.NET predica.


2

Sicuramente le pratiche IoC e basate su contratto in generale sarebbero in cima alla mia lista. Per una questione di esperienza, tuttavia, vorrei evitare di astrarre troppo dal problema semplicemente per ragioni di astrazione. Per esempio. astrazione perché puoi e non perché qualcuno sarà mai in grado di fare uso di quell'astrazione. Ho visto questo tipo di architettura andare male e semplicemente aggiungere un livello troppo alto di complessità a un sistema che peggiora la manutenzione del sistema.

Una sorta di ciclo di feedback attorno al processo di sviluppo, che si tratti di test unitari, integrazione continua e/o incontri "scrum". Mi rendo conto che in realtà non rientra nella sfera delle "architetture" agili, ma se non si dispone di un processo agile, non ci sarà alcun grado di architettura "agile".


0

È una domanda interessante, questa. È possibile creare un'architettura agile in isolamento? Se stiamo guardando qualcosa come XP, allora sono un po 'dubbioso. O forse ho frainteso, ma questo non mi ha mai impedito di espandermi ...

In XP, per prendere un approccio di cui so di più, avremo una sorta di struttura in un tempo molto breve dopo di noi avviare un progetto; circa il tempo in cui la prima storia è completa, infatti. Durante lo story-story iniziale avremo iniziato a farci un'idea di cosa potremmo costruire - è inevitabile: i programmatori tendono a pensare in termini di codice. Ma pensare troppo avanti ci porta nel territorio YAGNI.

Ho pensato che gran parte dell'architettura di un'applicazione sviluppata all'interno di un ambiente agile dovrebbe essere emergente attraverso, in particolare, un costante e dedicato refactoring per rimuovere la duplicazione.

Quindi forse la domanda è tanto da valutare se ci sono particolari caratteristiche - o classi di caratteristiche - che le architetture evolute come risultato di un processo agile tenderà a manifestarsi. E poi penso che dipenderà dal tipo di app che stiamo costruendo, anche se alcuni dei principi già menzionati (un paio dei quali capisco) devono essere probabili.


0

Per quanto mi riguarda, Agile non predica alcuna "Architetture" in quanto tale.Agile è una metodologia basata su principi fondamentali che influenzano la gestione dei progetti, i cicli di rilascio e le pratiche di sviluppo generale, ma certamente non l'architettura del software.

Tutti i modelli software elencati qui potrebbe essere utilizzato con un forte processo a cascata che è anatema per lo sviluppo Agile.


0

Onion Architecture

example


0

Essere mezzi agili che abbracciare il cambiamento, cioè adottare per cambiare i requisiti e le decisioni di progettazione e di accettare refactoring ecc .. molte cose modo "tradizionale" avrebbe disapprovare, dal momento che siete toccare qualcosa che funziona/precedentemente concordato.

In metodi come XP cerca di mantenere alta la qualità scrivendo i test delle unità. Facciamo finta di essere tutti d'accordo sulla scrittura dei test unitari.

Ora qui è dove si può introdurre un po 'architettura in modo che il sistema è testabile, o il test-friendly, perché non tutti i sistemi sono verificabili. Ad esempio, rendere lo strato intermedio chiamabile e separare il livello dell'interfaccia utente dalla logica aziendale ecc.


2

Una pratica di progettazione essenziale che suggerirei è quella di creare prima uno scheletro funzionale end-to-end della propria architettura. Per convalidarlo il prima possibile con un feedback reale.

Questo è ciò che i Pragmatic Programmer chiamano "Tracer Bullets" e Alistair Cockburn come "walking skeleton".

Puoi anche definire cosa un'applicazione è in contesto della vostra tesi? Prendi in considerazione solo application software o ti occupi anche di sistemi più complessi?


0

Se Robert Martin ha qualcosa da dire in proposito (e ha chiamato l'originale IIRC incontro Manifesto Agile), quindi assolutamente l'architettura ha tutto da A Con Agility. L'intera prima sezione del suo libro Agile Software Development, Principles, Patterns, and Practices riguarda i principi architettonici SOLID. Questo è stato alquanto controverso in alcuni ambienti, ma non capisco perché. Se il tuo codebase è fragile e fortemente accoppiato, allora non può essere molto aperto al cambiamento, che è il segno distintivo dell'agilità. Separare concettualmente il processo dalla pratica del codice è una cosa molto poco agile da fare.

Principio 1 del manifesto: "Apprezziamo gli individui e le interations oltre processi e strumenti"

Definizione Agile "processo" come un'astrazione separato dalla architettura della base di codice per me viola lo spirito di questo primo principio.