Ich habe zwei Anwendungen, A und B. Die aktuelle Version dieser Anwendungen ist 7.x (einige Kunden führen 7.1 aus, andere 7.2, ...). Beide Anwendungen verwenden dasselbe gemeinsame Framework (nennen wir dies C) wie folgt:
+---+ +---+
| A | | B |
+---------+
| C |
+---------+
Aufgrund einiger wichtiger Neukunden möchte ich die Funktionalität von A und B in einer großen Anwendung haben. Das Zusammenführen von A und B zu einer Anwendung ist nicht möglich, daher versuche ich jetzt, die Funktionalität von A in B zu integrieren. Bisher so gut, aber ich stoße auf einige Probleme.
Erstens sind Kunden, die nur die Basisfunktionalität von B verwenden, nicht an allen neuen Funktionen von A interessiert, die hinzugefügt werden (und die zusätzlichen Overhead für sie verursachen). Sie möchten nur ihre Version B mit Unterstützung für neue Windows-Versionen aktualisieren, ... und vielleicht auch alle netten Funktionen, die C (dem gemeinsamen Framework) hinzugefügt wurden.
Zweitens möchten Kunden, die derzeit Anwendung A verwenden, nicht direkt zu Anwendung B wechseln, obwohl die kombinierte Funktionalität von A + B ihnen langfristig helfen würde. Für einfache Upgrades möchten sie bei A bleiben und sogar einige Verbesserungen in C sehen.
Drittens könnten alle Entwicklungen, die ich in B mache, Auswirkungen auf die gemeinsame Schicht CEg haben, um die Leistung eines Moduls in B zu verbessern. Ich muss ein Modul in C umgestalten, aber da C auch in A verwendet wird, Ich muss viel mehr arbeiten. Darüber hinaus ist A eine ältere, weniger strukturierte Anwendung, und jede Änderung in C kann A instabiler machen.
Frage ist, wie es weitergeht? Ich denke derzeit darüber nach, B in eine 7.x-Version aufzuteilen (ich könnte hier noch einige kleinere Entwicklungen vornehmen und bei Bedarf in den kommenden Jahren 7.3, 7.4 veröffentlichen) und eine 8.x-Version (die alle neuen Funktionen enthalten würde). . Um das Problem der gemeinsamen Ebene zu lösen, könnte ich C auch in ein altes C (7.x) und ein neues C (8.x) aufteilen. Dies ergibt das folgende Ergebnis:
+-------+ +-------+ +-------+
| A 7.x | | B 7.x | | B 8.x |
+-----------------+ +-------+
| C 7.x | | C 8.x |
+-----------------+ +-------+
Anwendung A würde sich nicht mehr weiterentwickeln und sich an die 7.x-Version der gemeinsamen Schicht C halten.
Das Aufteilen von C bedeutet, dass alle Entwicklungen in C entweder nicht in den alten Versionen A und B zu sehen sind (die noch in Version 7.x enthalten wären), oder wenn sie in Version 7.x von A und B durchgeführt werden müssen, dies erforderlich wäre Entwicklungen in beiden Releases.
Eine Alternative könnte darin bestehen, B in B 7.x und B 8.x aufzuteilen. Dies würde jedoch die Refactoring-Möglichkeiten in C einschränken und tatsächlich nur die ersten beiden Probleme lösen.
Hat jemand Erfahrung mit solch einer großen Release-Änderung? Irgendwelche anderen Ideen?