Wer kennt das nicht, dass Konsumenten einer eigenen Bibliothek nachfragen, wie diese richtig anzuwenden ist. Visual Studio 2015 hat dafür ein passendes Konstrukt geschaffen: Die Code-aware Librarys.
Mit Code-aware Librarys hat Microsoft Entwicklern in Visual Studio 2015 und Roslyn ein Werkzeug zur Verfügung gestellt, das hilft, die Bibliotheken ihrer Bestimmung entsprechend anzuwenden und auf Fehlerquellen hinzuweisen. Dieses Wissen wird in Code-aware Librarys, anders als deren Namen annehmen lassen, in einer separaten Bibliothek ausgeliefert, da ein Endkunde mit diesen zusätzlichen Bytes nicht in Interaktion tritt.
Aufbauend auf Roslyn und dessen APIs werden in der Code-aware Library spezifische Diagnostic Analyzer und CodeFixProvider implementiert.
Was bringt es?
Erfahrungen der Entwickler können mit Code-aware Librarys in Code gegossen werden und nicht-affine Entwickler direkt beim Verwenden der Artefakte dabei unterstützen, diese sachgemäß anzuwenden. Durch Warnungen und sogar Fehler kann die Code-aware Library den Entwickler führen, wie die Bibliothek anzuwenden ist. Darüber hinaus können auch Vorschläge unterbreitet werden, wie diese Fehler zu beheben sind.
Ein Anwendungsszenario kann wie folgt aussehen:
Eine Nutz-Bibliothek für Datenbankzugriffe enthält eine öffentlich Klasse (DataAccess) mit zwei virtuellen Methoden um eine Verbindung mit der Datenbank aufzubauen namens InitializeBackend und InitializeDatabase. Es existieren weitere virtuelle Methoden um Informationen auszulesen, diese werden hier der Einfachheit nicht berücksichtigt. Am einfachsten ist es die zwei Methoden zum Verbindungsaufbau im Konstruktor aufzurufen. Dies führt jedoch zu einer “virtual member call in constructor”-Warnung. Dies lässt sich mit einer nicht-virtuellen Methode Initialize beheben, welche InitializeBackend und InitializeDatabase aufruft. In Abbildung 1 ist dies zu entnehmen. Der Anwender muss nun explizit die neue Initialize-Methode vor dem Abfragen der Informationen von der Datenbank aufrufen (siehe Abbildung 2). Eine Code-aware Library unterstützt den Entwickler an dieser Stelle. Diese kann den Benutzer vor dem Abfragen der Informationen darauf hinweisen, dass ein Initialize-Aufruf fehlt. Und schlägt auch noch gleich vor diesen Aufruf einzufügen.
Abbildung 1: Inkorrekte Klasse
Abbildung 2: Korrigierte Klasse
Code-aware Librarys sollten nicht mit dem Endprodukt ausgeliefert werden. Dies kann auf unterschiedlich Art und Weise erfolgen. Einerseits können Code-aware Librarys mit der eigentlichen Bibliothek als NuGet-Paket verteilt werden. Die Code-aware Library wird dabei nicht als Referenz dem Projekt hinzugefügt, sondern als “Analyzer”-Referenz. Andererseits können diese auch als VSIX verteilt werden. Als weitere Option können Code-aware Librarys über die GUI einem Projekt manuell hinzugefügt werden. Dies ist in Abbildung 3 zu sehen:
Abbildung 3: Hinzufügen eines Analyzers in ein Projekt
Fazit
Code-aware Librarys sind ein gutes Mittel um das Verständnis für Bibliotheken zu erhöhen und potentielle Fehlerquellen schon während des Schreibens von Code zu identifizieren. Sie ersetzen jedoch keine Dokumentation.