Frage

Was sind die Dinge, die ich für suchen sollte, wenn ich einen Abhängigkeitsgraphen produzieren?

Oder um es anders auszudrücken, was sind die Merkmale eines gut aussehenden Graphen vs einem schlechten?

Edit:. Der Kontext ist hier mein erster Blick auf meine Baugruppen in NDepend

War es hilfreich?

Lösung

Das größte Problem, das Sie erkennen können, ist auf jeden Fall Abhängigkeiten Zyklen. Das Tool NDepend schlägt eine interaktive Abhängigkeit Matrix rel="nofollow und Abhängigkeitsgraphen das wird helfen, zu erkennen, Abhängigkeit cyles . Disclaimer: Ich bin einer der Entwickler des Werkzeugs

eingeben Bild Beschreibung hier

bemerkt, dass die Abhängigkeitsmatrix viel mehr als Graph angepasst ist, Zyklen zu beschmutzen. Weil ein Zyklus vermeiden, dass die Matrix Dreieck sein.

Die anderen Bereiche der Probleme in Bezug auf Ihre Anwendungsstruktur: Zum Beispiel ist es normal ist, dass die Benutzeroberfläche direkt auf die DB verwendet? oder noch schlimmer, die DB hängt von UI?

Sie können schreiben Coderegeln über LINQ-Abfragen (CQLinq) für verboten zu überprüfen Abhängigkeiten. Die folgende Code Regelprüfung, dass UI-Typ nicht direkt DB-Typen verwenden sollte:

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

Andere Tipps

ein Abhängigkeitsgraphen von was? Klassen? Stored Procedures?

Zyklen sind schlecht ...

Wenn eine Abhängigkeit zu ändern bedeutet, dass Sie eine ganze Menge anderer zu ändern, ist es schlecht.
Aber ja, könnte einiger Kontext helfen.

Ich weiß nicht bekannt, welche NDepend zeigt aber Artefakte, die (vor allem unabhängige Abschnitte) von Code in viele Abschnitte zu bekommen neigt dazu neigen würde schlecht (IMHO) zu sein. Ich habe gedacht, dass als „Krebs-Code“.

Ein Sprecher auf einer Konferenz NFJS zeigte uns einige Abhängigkeitsgraphen ... Ein Geruch er wies darauf hin, war für die Dinge mit Beziehungen zu verschiedenen funktionalen Teilen Ihrer Code-Basis zu suchen. Diese wahrscheinlich brechen Kapselung.

Auch würde ich an der allgemeinen Komplexität jeden Abschnitt aussehen .. diejenigen mit Linien alle über Verdächtigen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top