TypeScript 中的决策表:一种被低估的简洁代码模式

news/2024/9/21 16:09:08/文章来源:https://www.cnblogs.com/aow054/p/18424130
在构建复杂的软件系统时,开发人员经常诉诸冗长的 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 中的决策表:一种被低估的简洁代码模式的详细内容,更多请关注我的其它相关文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 风格字符串函数

▲《C++ Primer》 P109 我们无法保证 c_str 函数返回的数组一直有效,事实上,如果后续的操作改变了 string 的值就可能让之前返回的数组失去效用。 WARNING: 如果执行完 c_str() 函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。

基于IDF的ESP32S3-LVGL DEMO移植

简介 ESP32-32出色的性价比,较好的性能与内存空间,可以好利用来完成GUI显示库的加载 LVGL LVGL是一款比较流行的致力于MCU与MPU创建漂亮UI的嵌入式图形库,免费且开源。 硬件 硬件采用的是正点原子的ESP32-S3 屏幕使用的是SPI通信方式,配合IO口控制(RST,A0),来实现LCD屏幕…

nginx: 按ip地址限流

一,以固定的速度提供服务 语法: 例子 limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;server { location / { limit_req zone=test; }} 语法: imit_req_zone 用于设置限流和共享内存区域的参数,格式为: limit_req_zone key zone rate。 key: 定…

Free5GC源码研究(2) - 单个NF的软件架构

前文我们总览了free5gc的总体软件架构。整一个free5gc系统又由几个NF(Network Function)组成,所以本文继续深入研究单个NF的软件架构。要研究NF的软件架构,最直接的方式是找一个简单的NF来回观摩。free5gc/ausf算是比较简单的一个,然而我发现了一个更简单的NF,叫做andy89…

一,初始 MyBatis-Plus

一,初始 MyBatis-Plus @目录一,初始 MyBatis-Plus1. MyBatis-Plus 的概述2. 入门配置第一个 MyBatis-Plus 案例3. 补充说明:3.1 通用 Mapper 接口介绍3.1.1 Mapper 接口的 “增删改查”3.1.1.1 查询所有记录3.1.1.2 插入一条数据3.1.1.3 删除一条数据3.1.1.4 更新一条数据3.…

[神经网络与深度学习笔记]LDA降维

LDA降维 LinearDiscriminant Analysis 线性判别分析,是一种有监督的线性降维算法。与PCA保持数据信息不同,LDA的目标是将原始数据投影到低维空间,尽量使同一类的数据聚集,不同类的数据尽可能分散 步骤:计算类内散度矩阵\(S_b\) 计算类间散度矩阵\(S_w\) 计算矩阵\(S_w^{-1…

C++ 指针和迭代器支持的操作

▲ 《C++ Primer》 P96 指针也都支持上面的操作。

代码整洁之道--读书笔记(14)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…

hexo安装后报错hexo 不是内部或外部命令,也不是可运行的程序 或批处理文件。

hexo问题 之前利用hexo和gitee搭建了一个博客,但是最近gitee的gitpage停止服务了,便想着在github上搭建一个。 在到安装hexo这一步的时候,一直报错hexo 不是内部或外部命令,也不是可运行的程序 或批处理文件。 我的所有安装步骤和环境变量发现都没有错,反复配置后去找了一…

跑冒滴漏监测系统

跑冒滴漏监测系统应用计算机视觉和深度学习技术对危化品生产区域实时检测,当检测到液体泄露时,立即抓拍存档告警并回传给后台监控平台方便人员及时处理,提高图像数据的实时监控效率。跑冒滴漏监测系统7*24小时不间断对监控画面实时分析监测,避免意外事故发生,同时降低人力…

学校食堂明厨亮灶监控系统

学校食堂明厨亮灶监控系统通过卷积神经网络学习与图像识别技术,学校食堂明厨亮灶监控系统将对现场监控画面进行24小时实时分析,如:厨房出现老鼠狗猫、厨师未戴口罩、厨师未戴厨师帽、厨师服穿戴识别、抽烟识别、玩手机识别,同时实时抓拍相关情况,全程记录留痕,提升监管效…

河道采砂识别监测系统

河道采砂识别监测系统借助深度视觉边缘分析技术,自动对监控区域违法采砂进行实时监测。如果河道采砂识别监测系统监测到有人违法采砂时,立即抓拍存档预警,将违规采砂截图发给后台管理中心,提醒后台人员及时处理。河道采砂识别监测系统可根据时间段违规记录、视频进行查找,…