Ich arbeite mit einem Team an einer neuen Java-API für eines unserer internen Projekte. Wir werden uns wahrscheinlich nicht die Zeit nehmen können, alle Details der Java-Interfaces zu stoppen und zu hacken und sie am Anfang zu 100% perfekt zu machen.Was ist der geeignete Weg, um eine Java-API mit neuen Funktionen im Laufe der Zeit zu planen?
Wir haben einige Kernfunktionen, die vorne sein müssen, und andere, die wahrscheinlich später hinzugefügt werden, sind aber jetzt nicht wichtig, + die Zeit zu nehmen, diese Funktionen jetzt zu entwerfen, ist ein Luxus, den wir nicht ' t haben. Zumal wir noch nicht genug Informationen haben, um alle Designdetails richtig zu machen.
Der Java-Ansatz zu APIs ist, dass sobald Sie eine Schnittstelle veröffentlichen, es praktisch unveränderbar ist und Sie es nie ändern sollten.
Gibt es eine Möglichkeit, API Evolution im Laufe der Zeit zu planen? Ich habe this question gelesen und ich nehme an, wir könnten dies tun:
// first release
interface IDoSomething
{
public void hop();
public void skip();
public void jump();
}
// later
interface IDoSomething2 extends IDoSomething
{
public void waxFloor(Floor floor);
public void topDessert(Dessert dessert);
}
// later still
interface IDoSomething3 extends IDoSomething2
{
public void slice(Sliceable object);
public void dice(Diceable object);
}
und dann unsere Klassen Upgrade IDoSomething
-IDoSomething2
unterstützen und dann IDoSomething3
, aber dies scheint ein Code Geruch Problem zu haben.
Dann denke ich, es gibt die Guava way of marking interfaces with @Beta
so Anwendungen können diese in Gefahr, bevor sie eingefroren werden, aber ich weiß nicht, ob das auch richtig ist.
, wenn Ihr Projekt intern ist, ich bin nicht sicher, ob diese Aussage viel gilt „Der Java-Ansatz für APIs ist, dass wenn Sie eine Schnittstelle veröffentlichen, es ist effektiv unveränderlich ...“. Als internes Projekt können Sie die Änderungen Ihrem Team mitteilen. Wenn diese Art der Kommunikation nicht möglich ist.Sie können Factories verwenden, um abhängig von der Clientversion die richtige API bereitzustellen (aus Gründen der Abwärtskompatibilität), sodass der Client wissen muss, dass er eine versionierte API verwendet und die in der Anforderung verwendete Version enthält (oder einen anderen Einstiegspunkt bereitstellt) für neue Versionen) – ochi
Hinweis: Eines der Hauptprobleme mit Interfaces wurde mit Java 8 gemildert: Sie können jetzt 'defaults' Methoden zu Interfaces hinzufügen, was die Dinge sehr vereinfacht und die Einhaltung der Regel erleichtert. *" When in Zweifeln Sie, lassen Sie es aus "*, auf das Josh Bloch in seinem exzellenten Vortrag über" Wie man eine gute API entwickelt und warum es wichtig ist ", verweist http://www.infoq.com/presentations/effective-api-design. Abgesehen davon, ein weiterer Zeiger: Ich denke, dass das Wiki (und das Buch) von http://wiki.apidesign.org/wiki/TheAPIBook einen Blick wert ist. – Marco13
danke Marco ... yeah, ich habe etwa 10 Minuten vor dem Stellen dieser Frage eine Kopie von Tulach's Buch bestellt. –