Mal wieder eine Situation, die langsam auf mich zurollt und wo ich die noch verbleibende Zeit nutzen möchte, mal nachzuhaken, ob wer nen schlauen Tipp hat. Und zwar konnte ich es für meine Anwendungen bisher immer vermeiden Kunden Extrawürste zu braten. Dummerweise wird sich das zukünftig nicht immer verhindern lassen, d.h. einzelne Kunden werden beliebig kleine oder große Teile der Software (je nach Wunsch und Geldbeutel) an ihre eigenen Bedürfnisse angepasst haben wollen.
Manches kann man einfach als Idee zur Weiterentwicklung in eine neue Version einfließen lassen, manches kann man intern über Parameter steuern. Aber konkret wird es in Kürze so aussehen, dass ich mir für einige Änderungen etwas anderes überlegen muss. Für eine Anwendung, die in stetiger Weiterentwicklung ist, sind Kundenanpassungen quer durch beliebige Klassen natürlich furchtbar schlecht wartbar. Nach Möglichkeit will ich nur ein Projekt, also einen Source-Tree pflegen müssen, anstatt jede Kundenversion einzeln abzuändern - das würde in einem endlosen Chaos enden.
Auf Anhieb fallen mir folgende Herangesehensweisen ein:
a) Die Anwendung bekommt beim Start übergeben um welchen Kunden es sich handelt (Konstante aus einem Interface oder einer meiner eh schon vorhandenen Klasse Configuration) und das benutze ich intern als Schalter an allen notwendigen Stellen, um entsprechend zu steuern.
b) Jede Kundenänderung ist in gewisser Weise ja ein Feature. Also lege ich für jedes Feature einen Schalter zur Konfiguration an und über eine Konfig-Datei kann dann gesteuert werden bei welchem Kunden welches Feature aktiv/inaktiv ist.
A ist etwas einfacher in der Umsetzung und man sieht im Code an den entsprechenden Stellen direkt was zu welchem Kunden gehört.
B ist etwas mehr Arbeit in der Umsetzung, dafür kann die Konfiguration für einen Kunden aber extern gelagert und dort editiert werden (natürlich nur begrenzt im Rahmen der in der installierten Version vorhandenen Features).
Vielleicht hat ja jemand ne bessere Idee, vielleicht gibts Pattern, die einem hier das Leben leichter machen können. Wenn wer ne Idee oder Erfahrung hat, wärs cool mal zu hören, wie er das lösen würde / gelöst hat.
Manches kann man einfach als Idee zur Weiterentwicklung in eine neue Version einfließen lassen, manches kann man intern über Parameter steuern. Aber konkret wird es in Kürze so aussehen, dass ich mir für einige Änderungen etwas anderes überlegen muss. Für eine Anwendung, die in stetiger Weiterentwicklung ist, sind Kundenanpassungen quer durch beliebige Klassen natürlich furchtbar schlecht wartbar. Nach Möglichkeit will ich nur ein Projekt, also einen Source-Tree pflegen müssen, anstatt jede Kundenversion einzeln abzuändern - das würde in einem endlosen Chaos enden.
Auf Anhieb fallen mir folgende Herangesehensweisen ein:
a) Die Anwendung bekommt beim Start übergeben um welchen Kunden es sich handelt (Konstante aus einem Interface oder einer meiner eh schon vorhandenen Klasse Configuration) und das benutze ich intern als Schalter an allen notwendigen Stellen, um entsprechend zu steuern.
b) Jede Kundenänderung ist in gewisser Weise ja ein Feature. Also lege ich für jedes Feature einen Schalter zur Konfiguration an und über eine Konfig-Datei kann dann gesteuert werden bei welchem Kunden welches Feature aktiv/inaktiv ist.
A ist etwas einfacher in der Umsetzung und man sieht im Code an den entsprechenden Stellen direkt was zu welchem Kunden gehört.
B ist etwas mehr Arbeit in der Umsetzung, dafür kann die Konfiguration für einen Kunden aber extern gelagert und dort editiert werden (natürlich nur begrenzt im Rahmen der in der installierten Version vorhandenen Features).
Vielleicht hat ja jemand ne bessere Idee, vielleicht gibts Pattern, die einem hier das Leben leichter machen können. Wenn wer ne Idee oder Erfahrung hat, wärs cool mal zu hören, wie er das lösen würde / gelöst hat.