Question

Quelles sont les choses que je devrais rechercher lorsque je produis un graphique de dépendance?

Ou en d'autres termes, quelles sont les caractéristiques d'un bon graphique par rapport à un mauvais?

Éditer: Le contexte ici est mon premier regard sur mes assemblages dans NDepend.

Était-ce utile?

La solution

Le plus gros problème que vous pouvez déceler est sans aucun doute le cycle des dépendances. L’outil NDepend propose une matrice de dépendance interactive et un Graphique de dépendance permettant de repérer dépendances cyles . Avertissement: je suis l'un des développeurs de l'outil

entrer la description de l

Notez que la matrice de dépendance est beaucoup plus adaptée que le graphique pour repérer les cycles. Parce qu'un cycle évite que la matrice soit triangulaire.

Les autres gammes de problèmes sont relatives à la structure de votre application: par exemple, est-il normal que l'interface utilisateur utilise directement le DB? ou bien pire, la base de données dépend de l'interface utilisateur?

Vous pouvez écrire des règles de code sur les requêtes LINQ (CQLinq) pour vérifier si elles sont interdites. dépendances. La règle de code suivante vérifie que les types d'interface utilisateur ne doivent pas utiliser directement les types de base de données:

// <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 }

Autres conseils

un graphe de dépendance de quoi? Des classes? procédures stockées?

les

cycles sont mauvais ...

Si changer une dépendance signifie que vous devez changer beaucoup d'autres, c'est mauvais.
Mais oui, un contexte pourrait aider.

Je ne sais pas ce que montre NDepend, mais les artefacts qui ont tendance à entrer dans de nombreuses sections (en particulier des sections non liées) de code auraient tendance à être mauvais (à mon humble avis). J'ai considéré cela comme un "code du cancer".

Un conférencier à une conférence du NFJS nous a montré des graphiques de dépendance ... Une des odeurs qu'il a signalées consistait à rechercher des relations avec différentes parties fonctionnelles de votre base de code. Ceux-ci cassent probablement l'encapsulation.

J'examinerais également la complexité générale de chaque section. Les sections comportant des lignes sont suspectes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top