UGIdotNET Home UGIdotNET Home
UGIdotNET Blogs UGIdotNET Blogs
UGIdotNET Forum UGIdotNET Forum
MSDN Architetti MSDN Architetti
Visualizza Modifiche Visualizza Modifiche
Modifica Modifica
Stampa Stampa
Modifiche Recenti Modifiche Recenti
Sottoscrizioni Sottoscrizioni
Ufficio Oggetti Smarriti Ufficio Oggetti Smarriti
Cerca Riferimenti Cerca Riferimenti
Rinomina Rinomina
Cerca

Versioni

23/05/2007 18.12.07
LucaMinudel-193.42.138.35
23/05/2007 18.09.06
LucaMinudel-193.42.138.35
22/02/2007 12.34.12
-193.42.138.35
03/01/2007 21.10.20
LucaMinudel-88.149.167.162
19/12/2006 13.12.27
RiccardoGolia-83.225.217.238
Elenco completo versioni Elenco completo versioni
Valutare Il Disegno Di Una Applicazione
.
Summary Elenco di criteri per valutare il disegno di una applicazione.

Pubblicato nella Rubriki Numero 4 - 14 Dic 2006 da LucaMinudel

Questa è una lista di caratteristiche che il disegno di una applicazione può esprimere. La lista non prende in considerazioni scelte architetturali e requisiti non funzionali che ci sono per una specifica applicazione e non considera nemmeno le priorità che ogni singolo team può scegliere per se tra le varie qualità che un buon disegno può esprimere. La lista quindi contiene le caratteristice di base del disegno di una applicazione che hanno una validità generale.

Le caratteristiche sono elencate a partire dagli aspetti più macroscopici che cioè hanno un impatto ampio sull'intera applicazione proseguendo via via con gli aspetti di dettaglio che invece hanno un impatto più localizzato; per questo da quanto ho provato con un approccio graduale conviene cominciare a risolvere eventuali problemi partendo dal primo punto della lista per passare solo in seguito al successivo.

  • Sono raggruppati nello stesso Assembly i tipi che solitamente vengono rilasciati e riutilizzati insieme ?
  • Sono raggruppati nello stesso namespace i tipi logicamente correlati e i namespace organizzati (nidificazione tra di loro, contenimento nello stesso Assembly o in Assembly distinti) secondo la loro relazione logica e in modo di ridurre le dipendenze tra namespace distinti?
  • Le classi pubbliche hanno un nome che descrive il ruolo e la responsabilità della classe, i membri pubblici un nome che rappresenta la funzione svolta, i parametri dei metodi pubblici un nome significativo che rappresenta il significato del parametro?
    • Azione correttiva: rinominare classi, membri e parametri con dei nomi intuitivi e comprensibili a prima vista per un nuovo utilizzatore
      • guardando con sospetto i nomi di classi che indicano azioni/verbi invece che oggetti/concetti e quelle che usano il suffissi tipo XxxManager e XxxController
      • differenziando i nomi dei metodi pubblici che effettuano un solo calcolo senza modificare lo stato della classe (tipo IsXxx, GetXxx, CheckXxx, ExistsXxx, ContainXxx) dai nomi dei metodi pubblici che modificano lo stato dell'oggetto (SetXxx, AddXxx, etc.)
  • Le responsabilità sono ripartite in modo chiaro tra le classi?
  • Sono state eliminate le classi di soli dati e di sole funzioni residue della programmazione procedurale?
  • Sono state rimosse le dipendenze circolari tra Assembly e classi e sono state eliminate le dipendenze non necessarie tra classi di assembly diversi e tra classi di namespace diversi?
  • L'ereditarietà è stata utilizzata unicamente nei casi effettivamente necessari?
  • La classi e i metodi troppo lunghi sono state spezzati in modo da renderli comprensibili?
  • Gli algoritmi più complessi sono stati semplificati e sono comprensibili?
    • Azione correttiva: Modificare l'algoritmo semplificandone il flusso, utilizzando nomi parlanti per le variabili, scomponendolo dove possibile e rimuovendo ottimizzazioni non indispenzabili sino a renderlo comprensibile ad un nuovo programmatore che lo legge.
    • Approfondimenti: il principio PrincipioKiss, la CodeSmell CodeSmellSwitchStatements e i Refactoring a livello di metodo.

Quando si inizia a lavorare su codice legacy che non si conosce ho notato che conviene iniziare a considerare gli aspetti di granularità pià grossa (assembly, namespace) per poi scendere via via in giù mentre si comprende e si riorganizza il codice.

Quando si scrive nuovo codice o su codice che si conosce ho notato che conviene partire a considerare gli aspetti a granularità più fina (algoritmo, metodo) lasciando emergere via via le scelte di disegno a granularità più grossa.

VediAnche ProgrammazioneObjectOriented, ArchitetturaObjectOriented, ProcessiDiSviluppoSoftware.

Lascia qui sotto le tue considerazioni e commenti: [Modifica]

UGIdotNETWiki

UGIdotNETWiki è il WikiWiki italiano dedicato a .NET

Se è la prima volta che senti parlare di Wiki, leggi il BenvenutoAiVisitatori e WikiInUnMinuto, oppure il ManualePassoPassoDelWiki.

Argomenti Recenti

  • ValutareIlDisegnoDiUnaAppli...
© 2008 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali