Beim Aufbau komplexer Softwaresysteme greifen Entwickler oft auf langwierige if-else- oder switch-Anweisungen zurück, um die Entscheidungslogik zu handhaben.
Obwohl diese Ansätze funktionieren können, werden sie mit zunehmender Anzahl der Erkrankungen schnell unkontrollierbar. Hier kommen Entscheidungstabellen ins Spiel.
Ein leistungsstarkes, aber wenig genutztes Muster, das komplexe Entscheidungen auf saubere, wartbare Weise vereinfacht.
In diesem Artikel erfahren Sie, was Entscheidungstabellen sind, warum Sie sie verwenden sollten und wie Sie sie in TypeScript implementieren, um komplexe Logik problemlos zu handhaben.
Eine Entscheidungstabelle ist eine strukturierte Möglichkeit, verschiedene Kombinationen von Eingabebedingungen entsprechenden Aktionen oder Ergebnissen zuzuordnen. Stellen Sie sich das wie eine Tabelle vor, in der jede Zeile eine eindeutige Kombination von Eingabevariablen darstellt und die entsprechende Spalte die Ausgabe oder Aktion definiert. Dadurch können Sie alle möglichen Szenarien an einem Ort visualisieren, was die Verwaltung und das Verständnis erleichtert.
Angenommen, Sie bauen eine E-Commerce-Plattform auf und müssen basierend auf ihrem Kundenstatus, ihrer Kaufhistorie, verfügbaren Werbeaktionen und ihrer bevorzugten Sprache unterschiedliche E-Mail-Vorlagen an Benutzer senden.
Mit 3 booleschen Variablen (isGoldCustomer, isFirstPurchase, isPromoAvailable) und einer Enum-Variable (emailLanguage) sind 24 mögliche Kombinationen zu verarbeiten.
Aber anstatt 24 If-Else- oder Switch-Fälle zu schreiben, bietet eine Entscheidungstabelle eine sauberere Lösung.
Entscheidungstabellen bieten gegenüber der herkömmlichen bedingten Logik mehrere Vorteile:
Sehen wir uns an, wie man eine Entscheidungstabelle in TypeScript implementiert.
Der einfachste Weg, eine Entscheidungstabelle in TypeScript zu implementieren, ist die Verwendung eines Arrays von Objekten. Jedes Objekt stellt eine Zeile in der Entscheidungstabelle dar.
Anschließend können Sie mit der Suchmethode des Arrays die Zeile finden, die den Eingabevariablen entspricht, und den entsprechenden Ausgabewert zurückgeben.
type TEmailLanguage = 'en' | 'es' | 'fr'; interface IDecisionTableRow { //These are the input values that determine the output value isGoldCustomer: boolean; isFirstPurchase: boolean; isPromoAvailable: boolean; emailLanguage: TEmailLanguage; // The last property is the output value template: string; }; const DECISION_TABLE: IDecisionTableRow[] = [ { isGoldCustomer: true, isFirstPurchase: true, isPromoAvailable: true, emailLanguage: 'en', template: 'welcome_en.html', }, { isGoldCustomer: true, isFirstPurchase: true, isPromoAvailable: true, emailLanguage: 'es', template: 'welcome_es.html', }, { isGoldCustomer: true, isFirstPurchase: true, isPromoAvailable: true, emailLanguage: 'fr', template: 'welcome_fr.html', }, // more rows... ]; const getTemplate = ( isGoldCustomer: boolean, isFirstPurchase: boolean, isPromoAvailable: boolean, emailLanguage: EmailLanguage ): string => { const row = decisionTable.find( (row) => row.emailLanguage === emailLanguage && row.isGoldCustomer === isGoldCustomer && row.isFirstPurchase === isFirstPurchase && row.isPromoAvailable === isPromoAvailable ); if (!row) { throw new Error('No matching row in decision table'); } return row.template; };
In diesem Beispiel haben wir ein Array von Objekten namens DECISION_TABLE, das die Entscheidungstabelle darstellt.
Jedes Objekt verfügt über 4 Eigenschaften, die die Eingabevariablen darstellen, und 1 Eigenschaft, die den Ausgabewert darstellt.
Die getTemplate-Funktion verwendet die Eingabevariablen als Argumente und verwendet die Suchmethode, um die Zeile in der Entscheidungstabelle zu finden, die mit den Eingabevariablen übereinstimmt.
Wenn keine Zeile gefunden wird, gibt die Funktion einen Fehler aus.
Und das ist es! Sie haben jetzt eine saubere, wartbare Möglichkeit, mit komplexer Logik umzugehen, die von mehreren Eingabevariablen abhängt.
Entscheidungstabellen bieten einen leistungsstarken und effektiven Ansatz zur Verwaltung komplexer Entscheidungslogik in TypeScript. Durch die Bereitstellung einer klaren und strukturierten Darstellung von Regeln verbessern sie die Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes. Durch die Einführung von Entscheidungstabellen in Ihren Projekten können Sie die Gesamtqualität und Effizienz Ihrer Codebasis verbessern.
Wenn Sie also das nächste Mal eine Reihe von if-else-Anweisungen oder switch-Anweisungen schreiben, um eine komplexe Logik zu handhaben, sollten Sie stattdessen die Verwendung einer Entscheidungstabelle in Betracht ziehen.
Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonEntscheidungstabellen in TypeScript: Ein unterschätztes Muster für saubereren Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!