TypeScript 中的決策表:一種被低估的簡潔程式碼模式

aow054發表於2024-09-21
在構建複雜的軟體系統時,開發人員經常訴諸冗長的 if-else 或 switch 語句來處理決策邏輯。 雖然這些方法可行,但隨著情況數量的增加,它們很快就會變得難以管理。這就是決策表發揮作用的地方。一種強大但未充分利用的模式,以乾淨、可維護的方式簡化複雜的決策。在本文中,我們將探討什麼是決策表、為什麼應該使用它們,以及如何在 typescript 中實現它們以輕鬆處理複雜的邏輯。 什麼是決策表?決策表是一種將輸入條件的各種組合對映到相應的操作或結果的結構化方法。將其視為一個表,其中每行代表輸入變數的唯一組合,相應的列定義輸出或操作。這使您可以在一個地方視覺化所有可能的場景,從而更易於管理和理解。例如,假設您正在構建一個電子商務平臺,需要根據使用者的客戶狀態、購買歷史記錄、可用促銷和首選語言向使用者傳送不同的電子郵件模板。使用 3 個布林變數(isgoldcustomer、isfirstpurchase、ispromoavailable)和一個列舉變數(emaillanguage),可以處理 24 種可能的組合。但是決策表提供了一個更清晰的解決方案,而不是編寫 24 個 if-else 或 switch case。 為什麼使用決策表?與傳統條件邏輯相比,決策表具有多種優勢:提高可讀性:單個表格捕獲所有可能的組合,使其更容易一目瞭然。更容易維護:修改邏輯變得像更新表中的單行一樣簡單,而不是梳理巢狀條件行。可擴充套件性:決策表可以處理更復雜的決策場景,而不會變得難以管理。讓我們深入瞭解如何在 typescript 中實現決策表。 如何在 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 中的決策表:一種被低估的簡潔程式碼模式的詳細內容,更多請關注我的其它相關文章!

相關文章