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?
quelle
Antworten:
Dies ist normalerweise nur ein Problem mit der Benutzeroberfläche: Bringen Sie die Funktionalität von A in Ihre kombinierte Anwendung "B 8.x" ein, trennen Sie sie jedoch so, dass sie von den Kunden von B auf der Ebene der Benutzeroberfläche nicht gesehen wird. Bauen Sie einen Switch in die Anwendung ein, damit Sie die A-Funktionalität nur für "A-Kunden" aktivieren können. Wahrscheinlich benötigen Sie einen weiteren Schalter, um die B-Funktionalität für A-Kunden auszublenden (dies gibt Ihnen auch die Möglichkeit, ihnen die B-Funktionalität als separates Modul zu verkaufen).
Ich denke, das wird kein Problem sein, wenn Sie sich um zwei Dinge kümmern:
Wenn Sie Ihre A-Kunden auf diese Weise auf B 8.x migrieren können, lösen Sie automatisch Ihr drittes Problem.
Eine Sache hinzuzufügen: Ich pflege eine Anwendung, die sich vor ungefähr 15 Jahren in einer sehr ähnlichen Situation befand ("A 7.x" war ein MS DOS-Programm, "B 7.x" war ein Windows-Programm mit vielen neuen Funktionen und "B 8.x" enthielten alle Funktionen beider Vorgänger, wobei die alten "A 7.x" -Funktionen in B integriert und als separates Modul verkauft wurden. Sie werden nicht überrascht sein, wenn ich Ihnen sage, dass wir seit mehr als 10 Jahren keine MS DOS-Kunden mehr haben, sodass der Übergang überhaupt kein Problem war.
quelle