Heim >Web-Frontend >js-Tutorial >Entscheidungstabellen in TypeScript: Ein unterschätztes Muster für saubereren Code

Entscheidungstabellen in TypeScript: Ein unterschätztes Muster für saubereren Code

PHPz
PHPzOriginal
2024-09-06 21:00:43647Durchsuche

Decision Tables in TypeScript: An Underrated Pattern for Cleaner Code

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.

Was ist eine Entscheidungstabelle?

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.

Warum Entscheidungstabellen verwenden?

Entscheidungstabellen bieten gegenüber der herkömmlichen bedingten Logik mehrere Vorteile:

  • Verbesserte Lesbarkeit: Eine einzige Tabelle erfasst alle möglichen Kombinationen und erleichtert so das Verständnis auf einen Blick.
  • Einfachere Wartung: Das Ändern der Logik wird so einfach wie das Aktualisieren einer einzelnen Zeile in der Tabelle, anstatt Zeilen verschachtelter Bedingungen durchzukämmen.
  • Skalierbarkeit: Entscheidungstabellen können komplexere Entscheidungsszenarien bewältigen, ohne unüberschaubar zu werden.

Sehen wir uns an, wie man eine Entscheidungstabelle in TypeScript implementiert.

So implementieren Sie eine Entscheidungstabelle in TypeScript

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.

Zusätzliche Überlegungen

  • Regelpriorisierung: Wenn mehrere Regeln den Eingabebedingungen entsprechen, müssen Sie möglicherweise einen Prioritätsmechanismus definieren, um die richtige Ausgabe zu bestimmen.
  • Standardwerte: Erwägen Sie die Bereitstellung einer Standardausgabe für den Fall, dass keine passende Regel gefunden wird.
  • Datenvalidierung: Implementieren Sie eine Validierung, um sicherzustellen, dass die Eingabewerte gültig sind und innerhalb der erwarteten Bereiche liegen.

Abschluss

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn