Domanda

Quali sono le cose che dovrei cercare quando produco un grafico delle dipendenze?

O, per dirla in altro modo, quali sono le caratteristiche di un grafico bello contro uno cattivo?

Modifica: il contesto qui è il mio primo sguardo alle mie assemblee in NDepend.

È stato utile?

Soluzione

Il problema più grande che puoi individuare è sicuramente il ciclo delle dipendenze. Lo strumento NDepend propone una matrice di dipendenza interattiva e una grafico delle dipendenze che aiuterà a individuare stili di dipendenza . Dichiarazione di non responsabilità: sono uno degli sviluppatori dello strumento

inserisci qui la descrizione dell

Si noti che la matrice di dipendenza è molto più adattata del grafico per individuare i cicli. Perché un ciclo evita che la matrice sia triangolare.

Le altre serie di problemi sono relative alla struttura dell'applicazione: ad esempio, è normale che l'interfaccia utente utilizzi direttamente il DB? o peggio ancora, il DB dipende dall'interfaccia utente?

Puoi scrivere regole del codice sulle query LINQ (CQLinq) per verificare se è proibito dipendenze. La seguente regola di codice verifica che i tipi di interfaccia utente non debbano utilizzare direttamente i tipi di DB:

// <Name>UI layer shouldn't use directly DB types</Name>
warnif count > 0

// UI layer is made of types in namespaces using a UI framework
let uiTypes = Application.Namespaces.UsingAny(Assemblies.WithNameIn("PresentationFramework", "System.Windows", "System.Windows.Forms", "System.Web")).ChildTypes()

// You can easily customize this line to define what are DB types.
let dbTypes = ThirdParty.Assemblies.WithNameIn("System.Data", "EntityFramework", "NHibernate").ChildTypes()
              // Ideally even DataSet and associated, usage should be forbidden from UI layer: 
              // http://stackoverflow.com/questions/1708690/is-list-better-than-dataset-for-ui-layer-in-asp-net
              .Except(ThirdParty.Types.WithNameIn("DataSet", "DataTable", "DataRow"))

from uiType in uiTypes.UsingAny(dbTypes)
let dbTypesUsed = dbTypes.Intersect(uiType.TypesUsed)
select new { uiType, dbTypesUsed }

Altri suggerimenti

un grafico delle dipendenze di cosa? classi? stored procedure?

i cicli sono cattivi ...

Se cambiare una dipendenza significa che devi cambiarne molte altre, è male.
Ma sì, un certo contesto potrebbe aiutare.

Non so cosa mostri NDepend ma gli artefatti che tendono ad entrare in molte sezioni (in particolare sezioni non correlate) del codice tendono ad essere cattivi (IMHO). L'ho pensato come "Codice del cancro".

Un relatore di una conferenza NFJS ci ha mostrato alcuni grafici delle dipendenze ... Un odore che ha sottolineato è stato quello di cercare cose con relazioni con diverse parti funzionali della tua base di codice. Questi probabilmente rompono l'incapsulamento.

Vorrei anche esaminare la complessità generale di ogni sezione .. quelli con linee dappertutto sono sospetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top