Gibt es Konventionen für die Benennung von Java-Paketen, die Klassen enthalten, die eine externe, versionierte API verwenden?Java-Paketnamen für die Versionierung externer APIs
Nehmen wir an, wir haben ein semantisches Versionshauptschema einer Dienstleistung und wir müssen einen Verbraucher implementieren, der mit einer bestimmten Version dieser API kompatibel und an diese gebunden ist. Was sind die besten Praktiken, um die Pakete (und Klassen) zu benennen?
Derzeit verwenden wir das Schema: ${service}_${M}_${N}
(mit M = Hauptversion, N = Nebenversion). Zum Beispiel: com.example.theService_1_0.
. Aber Sonarqube beschwert sich, dass es Konventionen nicht entspricht. Natürlich kann ich diese Regel einfach deaktivieren, aber ich frage mich, ob es Best Practices gibt?
Ich bin auf der Suche nach einem allgemeinen Ansatz, der nicht nur REST-spezifisch ist, weil ich Consumer-Implementierungen für WebService, REST und CORBA getroffen habe. Und ich bin nicht sicher, Artefakt-Versionierung (wie in Maven) funktioniert hier gut, da es sich auf die Version der Implementierung und nicht die API bezieht.
Ich weiß, es gibt Fragen um api versioning, aber das sind über den Hersteller, nicht der Verbraucher.
Bedeutet dies nicht potenziell unnötigen Code neu schreibt. Jedes Mal, wenn der Hersteller die Version ändert, müssen Sie den Paketnamen und alle Importanweisungen in allen Klassen mit diesen Klassen ändern. – 7663233
Ich habe in einigen Projekten (in der Finanzindustrie) gesehen, dass sie einfach Seite an Seite gehalten werden (mit den Kosten für doppelten Code), und Verbraucher getrennt halten, also ändert sich zu einer Verbraucherversion impl nicht einen anderen impl. Wenn eine neue Version auftaucht (was eine Frage von Jahren ist), beginnen sie damit, vorhandenen Code zu duplizieren. Es ist im Grunde ein Shared-Nothing-Ansatz. Es ist sicherlich eine pragmatische Praxis, aber ich frage mich, ob es (bessere?) Alternativen gibt? –
Ich würde keine Pakete nach einer Ziel-API-Version benennen. Ihr Projekt sollte eine Abhängigkeit zu einer bestimmten API-Version deklarieren, und Sie würden Ihr Projekt einfach mit seiner eigenen Versionsnummer versionieren, jedes Mal wenn Sie eine andere API-Version als Ziel haben möchten (zB wenn Sie die Abhängigkeitsversion ändern). Beispiel: myproject Version 1.1 .8 verwendet theapi Version 2.3.0, myProject Version 1.2.0 verwendet theapi Version 2.4.6. – Berger