Hinweis: Diese Frage bezieht sich auf Code, der in Java oder C # geschrieben wurde.
Ich verwalte einige große Projekte, bei denen wir Probleme (nicht unbedingt Fehler) mit einigen Drittanbieter- / SDK-Methoden entdeckt und unsere eigenen Erweiterungen geschrieben haben, die stattdessen verwendet werden sollten. Wir möchten, dass Entwickler sich daran erinnern, dass die Verwendung dieser Methoden für dieses Projekt nicht empfohlen wird.
Wenn wir unsere eigenen Bibliotheken verwendet hätten, könnten wir diese Methode leicht entfernen oder als veraltet / veraltet markieren, aber wir können dies nicht für Bibliotheken tun, die wir nicht geschrieben haben.
Als Beispiel verwenden wir eine Bibliothek, die uns zwei Überladungen bietet:
acme.calculate(int quantity_, double priceInUsDollars_);
acme.calculate(int quantity_, string currencyCode_, double priceInCurrency_);
Wir möchten, dass Entwickler immer den ersten verwenden und den Preis in US-Dollar von unseren eigenen Standard-Wechselkurssystemen erhalten. Und es wäre schön, wenn die IDE (Eclipse / Visual Studio) die Entwickler warnen würde, wenn sie die erste verwenden. Eine Compiler-Warnung reicht ebenfalls aus.
Derzeit müssen wir uns auf die Codeprüfer verlassen, um solche Fehler zu erkennen, und wie Sie sehen, ist dies kein verlässlicher Ansatz.
Ein möglicher Weg, auf den ich vorbereitet bin, besteht darin, meinen eigenen Check Style Check zu schreiben ( http://checkstyle.sourceforge.net/writingchecks.html ). Aber ich fragte mich, ob es etwas Einfaches gab, das ich verwenden konnte. Kennt jemand Möglichkeiten, um eine IDE / Compiler-Warnung der von mir beschriebenen Art zu erreichen?
Nicht-IDE / Compiler-Lösungen sind herzlich willkommen.
quelle
Antworten:
Mit einem Tool wie NDepend / JavaDepend können Sie benutzerdefinierte CQL-Abfragen schreiben, um Warnungen für diese ganz bestimmten Fälle zu generieren.
Sie sagten in der Frage, dass die IDE / der Compiler die Entwickler warnen soll. Ich denke, da NDepend / JDepend eng in die IDE integriert sind, kann dies Ihr Problem lösen.
quelle
Der "White-List-Ansatz": Schreiben Sie eine Wrapper-Bibliothek in die Bibliothek mit im Wesentlichen denselben Schnittstellensignaturen wie die Bibliothek selbst, lassen Sie jedoch die verbotenen Funktionen aus. Der Wrapper sollte jeden Methodenaufruf an den entsprechenden Bibliotheksaufruf delegieren. Dann lassen Sie Ihre Entwickler nur / Link zu diesem Wrapper anstelle der ursprünglichen Bibliothek verwenden. Der Wrapper ist möglicherweise auch ein guter Ort für Ihre Bibliothekserweiterungen.
Natürlich kann dies unpraktisch werden, wenn die Bibliothek eine sehr große API mit mehreren hundert Funktionen hat. Dann möchten Sie einen "Black List-Ansatz" wie die von Ihnen vorgeschlagene "Check Style" -Lösung implementieren.
quelle
Eine der Stärken von Java's Reflection besteht darin, dass Sie die Methodeneigenschaften zur Laufzeit ändern können. Eine der Verwendungsmöglichkeiten besteht darin, eine private Methode öffentlich zu machen, um sie trotzdem verwenden zu können. Es könnte sehr gut umgekehrt funktionieren, wenn Sie unerwünschte Methoden zur Laufzeit privat machen. Obwohl es bei der Kompilierung nicht angezeigt wird, wird es angezeigt, sobald das Projekt getestet wurde.
Dieser Artikel zeigt, wie Methodeneigenschaften zur Laufzeit geändert werden. Hier ist der interessante Teil:
quelle
Da mussten Sie in einigen Fällen bereits Ersatzmethoden erstellen. Ich würde eine Wrapper-Klasse für die gesamte Bibliothek erstellen und nur Ihre Wrapper-Klasse verwenden.
Wenn die Bibliothek aktualisiert wird, müssten Sie Ihren Code trotzdem aktualisieren. Die Wrapper-Klasse ist einfach zu aktualisieren.
Es vermeidet, dass Entwickler die falsche Methode verwenden, obwohl ... ich wage zu sagen, dass ein Entwickler sich daran erinnern sollte, welche Methoden er nicht verwenden soll.
quelle