© best_vector/Shutterstock.com
Windows Developer
Kundenspezifische Modifikationen wartbar integrieren

Dein Wunsch ist mir Befehl

Produkte werden in der Regel gemeinsam mit Dienstleistungen verkauft. Das ist bei Softwareprodukten nicht anders. Häufig möchte der Kunde eine gekaufte Standardsoftware anpassen lassen, damit sie den eigenen Geschäftsprozessen besser entspricht. Doch wie entwickelt man den Kern der Software dergestalt, dass er für unterschiedliche Einsatzzwecke anpassbar wird?

Manfred Steyer


In dieser Ausgabe zeige ich, wie man ein solches Vorhaben mit Angular realisieren kann. Dazu nutze ich ein einfaches Beispiel mit einer Komponente zum Bezahlen eines Einkaufs. Abbildung 1 zeigt ihre Standardimplementierung, die eine Bezahlung mit Kreditkarte erlaubt.

Abb. 1: Standardimplementierung des Zahlungsbereichs Abb. 2: Kundenspezifische Variante des Zahlungsbereichs

Die gezeigte Komponente besteht aus zwei weiteren, deren Grenzen mit einer gestrichelten Linie gekennzeichnet sind. Bei kundenspezifischen Anpassungen sollen nun all diese Komponenten oder auch nur ein Teil davon austauschbar sein. Das Gleiche gilt für Services, die sich um die Zahlungsabwicklung kümmern. Ein Beispiel für eine solche Anpassung zeigt Abbildung 2.

Die hier vorgestellte Lösung befindet sich wie immer auf GitHub [1].

Anpassung zur Laufzeit oder beim Build?

Für die Umsetzung kundenspezifischer Anpassungen hat man im Grunde zwei Möglichkeiten. Entweder man kümmert sich erst zur Laufzeit darum oder aber bereits beim Build, sodass das Kompilat bereits auf den Kunden abgestimmt ist.

Bevorzugt man die erste Variante, lassen sich mit Verzweigungen (if, switch etc.) parallel mehrere Varianten implementieren und zum Beispiel über eine Konfiguration aktivieren. Der Nachteil dieser Möglichkeit ist, dass das den Code aufbläht und die Wartbarkeit verringert. Der Einsatz von Dependency Injection schafft hier Abhilfe: Beispielsweise könnte die Anwendung für jeden Service eine factory-Funktion bei Angular registrieren. Diese entscheidet dann, welche Ausprägung des Service zu nutzen ist.

Geht man noch einen Schritt weiter, lädt man die vom Kunden gewünschten Service- und Komponentenvarianten dynamisch zur Laufzeit. Besonders einfach gestaltet sich das dynamische Nachladen, wenn Web Components zum Einsatz kommen [2].

Wer hingegen das Maximum an Performance herausholen möchte, integriert die kundenspezifischen Anpassungen bereits im Build. Das minimiert den Aufwand zur Laufzeit und erlaubt Optimierungen wie Tree Shaking. Außerdem erhält der Kunde nur die lizenzierten Programmteile. Das Nachladen einzelner Teile kann hier mittels Lazy Loading bewerkstelligt werden. Genau diesen Aspekt werden wir uns hier näher ansehen. Dazu nutze ich den derzeit sehr beliebten Monorepo-Ansatz.

Flexibilität mit Monorepos

Bei einem Monorepo handelt es sich eigentlich nur um einen Ordner mit zusammengehörigen Projekten (Abb. 3).

Abb. 3: Monorepo

Jedes dieser Projekte kann entweder eine ausführbare Anwendung oder eine wi...

Windows Developer
Kundenspezifische Modifikationen wartbar integrieren

Dein Wunsch ist mir Befehl

Produkte werden in der Regel gemeinsam mit Dienstleistungen verkauft. Das ist bei Softwareprodukten nicht anders. Häufig möchte der Kunde eine gekaufte Standardsoftware anpassen lassen, damit sie den eigenen Geschäftsprozessen besser entspricht. Doch wie entwickelt man den Kern der Software dergestalt, dass er für unterschiedliche Einsatzzwecke anpassbar wird?

Manfred Steyer


In dieser Ausgabe zeige ich, wie man ein solches Vorhaben mit Angular realisieren kann. Dazu nutze ich ein einfaches Beispiel mit einer Komponente zum Bezahlen eines Einkaufs. Abbildung 1 zeigt ihre Standardimplementierung, die eine Bezahlung mit Kreditkarte erlaubt.

Abb. 1: Standardimplementierung des Zahlungsbereichs Abb. 2: Kundenspezifische Variante des Zahlungsbereichs

Die gezeigte Komponente besteht aus zwei weiteren, deren Grenzen mit einer gestrichelten Linie gekennzeichnet sind. Bei kundenspezifischen Anpassungen sollen nun all diese Komponenten oder auch nur ein Teil davon austauschbar sein. Das Gleiche gilt für Services, die sich um die Zahlungsabwicklung kümmern. Ein Beispiel für eine solche Anpassung zeigt Abbildung 2.

Die hier vorgestellte Lösung befindet sich wie immer auf GitHub [1].

Anpassung zur Laufzeit oder beim Build?

Für die Umsetzung kundenspezifischer Anpassungen hat man im Grunde zwei Möglichkeiten. Entweder man kümmert sich erst zur Laufzeit darum oder aber bereits beim Build, sodass das Kompilat bereits auf den Kunden abgestimmt ist.

Bevorzugt man die erste Variante, lassen sich mit Verzweigungen (if, switch etc.) parallel mehrere Varianten implementieren und zum Beispiel über eine Konfiguration aktivieren. Der Nachteil dieser Möglichkeit ist, dass das den Code aufbläht und die Wartbarkeit verringert. Der Einsatz von Dependency Injection schafft hier Abhilfe: Beispielsweise könnte die Anwendung für jeden Service eine factory-Funktion bei Angular registrieren. Diese entscheidet dann, welche Ausprägung des Service zu nutzen ist.

Geht man noch einen Schritt weiter, lädt man die vom Kunden gewünschten Service- und Komponentenvarianten dynamisch zur Laufzeit. Besonders einfach gestaltet sich das dynamische Nachladen, wenn Web Components zum Einsatz kommen [2].

Wer hingegen das Maximum an Performance herausholen möchte, integriert die kundenspezifischen Anpassungen bereits im Build. Das minimiert den Aufwand zur Laufzeit und erlaubt Optimierungen wie Tree Shaking. Außerdem erhält der Kunde nur die lizenzierten Programmteile. Das Nachladen einzelner Teile kann hier mittels Lazy Loading bewerkstelligt werden. Genau diesen Aspekt werden wir uns hier näher ansehen. Dazu nutze ich den derzeit sehr beliebten Monorepo-Ansatz.

Flexibilität mit Monorepos

Bei einem Monorepo handelt es sich eigentlich nur um einen Ordner mit zusammengehörigen Projekten (Abb. 3).

Abb. 3: Monorepo

Jedes dieser Projekte kann entweder eine ausführbare Anwendung oder eine wi...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang