ホームページ >ウェブフロントエンド >jsチュートリアル >TypeScript のデシジョンテーブル: よりクリーンなコードのための過小評価されているパターン
複雑なソフトウェア システムを構築する場合、開発者は意思決定ロジックを処理するために長い if-else ステートメントや switch ステートメントを使用することがよくあります。
これらのアプローチは機能する可能性がありますが、条件の数が増えるとすぐに管理できなくなります。ここでデシジョンテーブルが役に立ちます。
クリーンで保守可能な方法で複雑な意思決定を簡素化する、強力だがあまり活用されていないパターン。
この記事では、デシジョン テーブルとは何か、デシジョン テーブルを使用する理由、複雑なロジックを簡単に処理するために TypeScript でデシジョン テーブルを実装する方法について説明します。
デシジョンテーブルは、入力条件のさまざまな組み合わせを対応するアクションまたは結果にマッピングするための構造化された方法です。これは、各行が入力変数の一意の組み合わせを表し、対応する列が出力またはアクションを定義するテーブルであると考えてください。これにより、考えられるすべてのシナリオを 1 か所で視覚化できるため、管理と理解が容易になります。
たとえば、e コマース プラットフォームを構築しており、顧客ステータス、購入履歴、利用可能なプロモーション、優先言語に基づいて、ユーザーにさまざまな電子メール テンプレートを送信する必要があるとします。
3 つのブール変数 (isGoldCustomer、isFirstPurchase、isPromoAvailable) と 1 つの列挙型変数 (emailLanguage) を使用すると、処理できる組み合わせは 24 通りあります。
ただし、24 個の if-else または switch ケースを記述する代わりに、デシジョン テーブルを使用すると、よりクリーンなソリューションが提供されます。
デシジョンテーブルには、従来の条件付きロジックに比べていくつかの利点があります。
TypeScript でデシジョン テーブルを実装する方法を詳しく見てみましょう。
TypeScript でデシジョン テーブルを実装する最も簡単な方法は、オブジェクトの配列を使用することです。各オブジェクトはデシジョンテーブルの行を表します。
次に、配列の find メソッドを使用して、入力変数に一致する行を検索し、対応する出力値を返すことができます。
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; };
この例には、意思決定表を表す DECISION_TABLE というオブジェクトの配列があります。
各オブジェクトには、入力変数を表す 4 つのプロパティと、出力値を表す 1 つのプロパティがあります。
getTemplate 関数は、入力変数を引数として受け取り、find メソッドを使用して、入力変数に一致するデシジョンテーブル内の行を検索します。
行が見つからない場合、関数はエラーをスローします。
それで終わりです!これで、複数の入力変数に依存する複雑なロジックを処理するクリーンで保守可能な方法が得られました。
デシジョン テーブルは、TypeScript で複雑な意思決定ロジックを管理するための強力かつ効果的なアプローチを提供します。ルールを明確かつ構造化して表現することにより、コードの可読性、保守性、拡張性が向上します。プロジェクトにデシジョンテーブルを採用することで、コードベースの全体的な品質と効率を向上させることができます。
次回、複雑なロジックを処理するために大量の if-else ステートメントや switch ステートメントを作成することになった場合は、代わりにデシジョン テーブルの使用を検討してください。
コーディングを楽しんでください!
以上がTypeScript のデシジョンテーブル: よりクリーンなコードのための過小評価されているパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。