Ich weiß, dass es eine breite Frage ist, also werde ich versuchen, so spezifisch wie möglich zu sein. Diese Frage ist eher eine "organisatorische" als eine technische Frage.
Wir haben ein vielseitiges Projekt mit folgenden Hauptkomponenten:
- Ein Server, der die Kerngeschäftslogik hostet (Datenmodelle)
- Ein Backoffice für Kunden, das die Kerngeschäftslogik verwendet
- Eine Anwendungs-API (REST), die auch die Kerngeschäftslogik verwendet
- Es gibt Smartphone-Apps (iOS und Android), die die Anwendungs-API verwenden
- Es gibt eine andere Tablet-App (Android) als die Smartphone-App, die dieselbe Anwendungs-API verwendet.
Bald werde ich mit aktiven Kunden in Produktion sein. Und wie bei jedem Projekt muss ich alle verschiedenen Komponenten im Laufe der Zeit warten. Das bedeutet, dass alle folgenden Elemente aktualisiert werden können:
- der Code der Kerngeschäftslogik auf dem Server (wird vom Backoffice, der API und als Nebeneffekt von mobilen Apps verwendet)
- die API selbst (wird sowohl von Smartphone- als auch von Tablet-Apps verwendet)
- alle mobilen Apps (via Appstore / Googleplay)
Natürlich können serverseitige Teile (Kerngeschäftslogikcode und API-Code) sofort von mir selbst geändert werden. Neue mobile Apps müssen jedoch von den Clients im Appstore / Googleplay heruntergeladen werden, und ich kann nicht sicher sein, ob sie auf dem neuesten Stand sind.
Könnten Sie Anleitungen und Tipps für bewährte Verfahren geben, um diese Upgrades reibungslos und ohne Risiko für den Kunden zu gestalten?
Welche Komponente brauche ich zur "Version"? Wie kann sichergestellt werden, dass alles funktioniert, auch wenn der Client seine mobile App nicht aktualisiert? Sollte ich ihn zwingen, ein Upgrade durchzuführen, um meine Arbeit zu erleichtern?
Mit einem Wort, wie sollte ich mich organisieren, damit mein vielseitiges Projekt im Laufe der Zeit lebendig wird?
Antworten:
Da Sie nicht steuern können, wann die mobilen Apps auf eine neue Version aktualisiert werden, müssen Sie mindestens Ihre REST-API versionieren. Wenn Sie dies nicht tun, können Sie keine abwärtskompatiblen Änderungen an dieser Schnittstelle vornehmen.
Neben der REST-API empfiehlt es sich, auch die anderen Kommunikationsschnittstellen zu versionieren, die über eine Netzwerkschnittstelle gehen. Auf diese Weise müssen Sie auch nicht alle Backoffice-Clients gleichzeitig mit den Servern aktualisieren, und Sie können eine schrittweise Migration auf eine neue Version mit einer "Beta-Test" -Periode implementieren.
Neben der Versionierung der Kommunikationsschnittstellen sollten Sie auch versuchen, die Änderungen so weit wie möglich abwärtskompatibel zu machen. Im Idealfall können Sie eine neue Schnittstellenversion einführen, die die alten Clients weiterhin vollständig unterstützt, damit sie nicht bemerken, dass sich etwas geändert hat.
quelle
Dieser Beitrag macht einen interessanten Punkt über Ihre Frage.
Praktischer ausgedrückt, wenn Sie 3 Komponenten haben:
Sie könnten das typische Mmp-Versionsschema (Major.minor.patch) für jedes verwenden, aber in Ihre Back-End-URL könnten Sie etwas als einfügen
http://youhost/M.m/resourceURI
.Während Sie sich weiterentwickeln und die Änderungen in der API keinen Einfluss auf Ihren Vertrag mit den Verbrauchern haben, behalten Sie
M.m
den Inhalt der URL bei. Von dem Moment an, in dem Sie im BackEnd eine Änderung vornehmen, die sich auf Ihre Verbraucher auswirkt (sei es eine Verhaltensänderung oder ein anderes Objekt), verwenden Sie einM.m+1
,M+1.m+1
oderM+1.m
.Um die Dinge am Laufen zu halten, müssen Sie das neue Back-End gleichzeitig mit dem alten bereitstellen, während Ihre Benutzer die neuen Konsumenten installieren und die ältere API langsam beenden.
Eine bessere Antwort als meine finden Sie hier: Versionierung der REST-API auf Stackoverflow
quelle
Ich empfehle Ihnen, einen Continuous Integration Server zu installieren, ihn an Ihr Code-Repository und ein Snapshot / Release-Repository anzuschließen und Ihre Builds zu automatisieren. Dies hat eine Reihe von Vorteilen:
Meine Erfahrung war mit Open Source-Tools: SVN, Maven 2, Jenkins und Nexus, aber es gibt Alternativen zu all diesen.
Unterschätzen Sie nicht die Lernzeit, um Ihr Team auf den neuesten Stand zu bringen. Aber sobald sie auf dem neuesten Stand sind, werden sie nie mehr zurückkehren.
quelle
Für ein relativ kleines Team für Entwicklung und Bereitstellung funktioniert das von IBM Jazz verwendete Client N-1-Kompatibilitätsmodell möglicherweise recht gut
Versuchen Sie , Clients und Server auf derselben Versionsnummer zu halten. [Anstatt eine Matrix unabhängiger Versionen und deren Kompatibilitäten zu verwalten]
Stellen Sie eine Richtlinie auf, dass die Clientversion Xyy mit allen Serverversionen über Xyy, jedoch unter X + 2.0.0 funktioniert
Für eine Serverversion 4.0 sollte es idealerweise für jeden Clienttyp eine Clientversion 4.0 geben. Die Kompatibilität sollte jedoch beibehalten werden, um geringfügig unterschiedliche Versionen von Clients und Servern zu ermöglichen.
Eine Client-Version 4.x sollte mit der Server-Version 4.x und höher, jedoch unter 6.0 kompatibel sein. Ein Server 4.x sollte mit allen Clients ab Version 3.0 kompatibel sein, jedoch kleiner oder gleich 4.x.
Auf diese Weise können Sie eine Version auf dem Server aktualisieren, ohne sich Gedanken über die sofortige Veröffentlichung neuer Versionen der Clients machen zu müssen. Es muss jedoch nur ein genau definiertes Kompatibilitätsfenster beibehalten werden.
Ref: IBM Jazz Model [ https://www.ibm.com/support/knowledgecenter/de/SSYMRC_6.0.0/com.ibm.jazz.install.doc/topics/c_n-1.html]
quelle
Zunächst möchte ich das Problem etwas anders formulieren. Sie haben gefragt, welche Software Sie "versionieren" müssen. Version ist ein überladener Begriff in CS und kann ungefähr 100 verschiedene Dinge bedeuten. Die wichtigsten Dinge, die ich betrachten würde, sind:
Da es für mich das nebulöseste und interessanteste ist, werde ich mich nur auf # 2 konzentrieren. Es gibt keine einheitliche Ausstechlösung für das Konfigurationsmanagement. Regeln, die für ein 2- oder 3-köpfiges Team gut funktionieren, können zu locker sein, um in einem Projekt, an dem Hunderte von Mitarbeitern arbeiten, vernünftig zu bleiben. Regeln, die für das große Team gelten, erfordern möglicherweise viel zu viel Aufwand für das kleine Team. Sie müssen höchstwahrscheinlich etwas Eigenes zusammenschustern, um etwas zusammenzubringen, aber ich würde die folgende Liste verwenden, um die Spezifikationen für Ihr Konfigurationsmanagementsystem zu entwickeln:
Benötigen Sie Hilfe bei der Beantwortung der obigen Fragen? Sie sollten wahrscheinlich einen Berater oder Software-Engineering-Manager beauftragen ... Antworten, die Lehrbücher füllen können und für diese Art von Forum weit außerhalb des Rahmens liegen.
quelle