Schon seit längerem gibt es meinen Roslyn Analyzer zur Erkennung von IOSP Verletzungen. Zum einen habe ich diesen aktualisiert, zum anderen gibt es nun auch ein Plugin für Rider.
Die Integration in Rider hat zahlreiche Vorteile. Vor allem ist es nun viel einfacher, den Analyzer zu konfigurieren. Dazu gibt es in Rider, nach Installation des Plugins, eine Settings Seite. Auf der können folgende Einstellungen vorgenommen werden:
- Metric – Hierüber kann bestimmt werden, wie gravierend die IOSP Verletzung sein muss, um sie als Warnung anzuzeigen.
- Testmethoden ausklammern – Über eine simple Checkbox können nun Testmethoden von der Analyse ausgeschlossen werden.
- Namespaces ignorieren – Eine Liste von Namespaces kann angelegt werden, deren Methoden in der Analyse ignoriert werden.
Zusätzlich kann über Settings – Editor – Inspection Settings – Inspection Severity – C# – IOSP Violation eingestellt werden, ob die Verletzungen als Fehler, Warnung, Suggestion oder Hint angezeigt werden sollen.
Das Plugin ist über den JetBrains Marketplace verfügbar. Die Installation erfolgt folgendermaßen:
- Gehe zu Settings – Plugins
- Wähle oben Marketplace
- Suche nach IOSP
- Gehe rechts auf Install
Rider bzw. das Plugin weist dich dann im Code auf Verletzungen des Integration Operation Segregation Principle (IOSP) hin.
In den Standardeinstellungen werden Verletzungen als Warnung angezeigt. Das bedeutet, der Methodenname wird farblich hervorgehoben.
In der Abbildung sieht man, dass der Name der Methode, hier „Start“, farblich hervorgehoben ist. Ferner wird beim Mauszeiger ein Tooltip angezeigt, aus dem hervorgeht, welche Anteile als Integration bzw. Operation gewertet wurde.
Die Metric = 2 zeigt an, dass es eine überschaubare Verletzung ist, die man ggf. ignorieren kann. Hier überwiegt der Integrationsanteil. Lediglich der Ausdruck 30*1000 ist einer Operation zuzuordnen. Nachfolgend der Quelltext:
public void Start(Action> onUpdate) {
new TimerProvider().ExecutePeriodic(30*1000, () => {
var symbole = _favoritenProvider.FavoritenLaden();
var wertpapiere = _kursProvider.KurseErmitteln(symbole);
onUpdate(wertpapiere);
});
}
Das Problem könnte behoben werden, indem man den Ausdruck 30*1000 in eine Konstante herauszieht.






