如何将双常量生成CCENTERURL的逻辑重构为统一单函数
极简适配版(完全匹配当前业务逻辑,仅保留1个函数)
直接合并原有判断逻辑和拼接逻辑到同一个函数中,调用时无需额外写if分支:
/** * 根据收件人邮箱获取对应ccenter跳转链接 * @param {string} recipientEmail 收件人邮箱 * @param {string | number} ticketID zendesk工单ID * @returns {string} 最终跳转链接 */ function getCcenterUrl(recipientEmail, ticketID) { const baseUrl = recipientEmail.indexOf('.com') > 0 ? `${HOSTURL}.com/ccenter/zendesk/landing/` : `${HOSTURL_AT}/ccenter/zendesk/landing/` return baseUrl + ticketID } // 业务侧调用直接一行完成,无需额外判断 const cCenterUrl = getCcenterUrl(data.ticket.recipient, zendeskID)
原来的两个常量、两个工具函数、业务侧的if判断分支都可以删掉,整体代码精简60%以上。
易扩展优化版(适合后续可能新增其他地区域名的场景)
用配置映射表统一管理不同域名对应的基础链接,后续新增规则无需修改函数逻辑,仅需新增配置即可:
// 统一管理顶级域名和对应基础链接的映射 const CCENTER_BASE_URL_CONFIG = { '.com': `${HOSTURL}.com/ccenter/zendesk/landing/`, '.at': `${HOSTURL_AT}/ccenter/zendesk/landing/` // 后续新增其他地区域名直接在这里加配置即可,比如 '.jp': 'xxx' } function getCcenterUrl(recipientEmail, ticketID) { // 匹配邮箱对应的域名规则 const matchedSuffix = Object.keys(CCENTER_BASE_URL_CONFIG).find(suffix => recipientEmail.includes(suffix)) // 可自定义兜底规则,这里默认用.com的链接 const baseUrl = matchedSuffix ? CCENTER_BASE_URL_CONFIG[matchedSuffix] : CCENTER_BASE_URL_CONFIG['.com'] return baseUrl + ticketID } // 调用方式和极简版完全一致 const cCenterUrl = getCcenterUrl(data.ticket.recipient, zendeskID)
优化收益
- 消除冗余重复代码,整体逻辑更聚合,维护成本更低
- 业务侧无需感知判断逻辑,调用更简洁,降低分支写错的风险
- 扩展版的配置和逻辑分离,后续迭代效率更高,也便于统一做基础链接的修改
内容的提问来源于stack exchange,提问作者cbln
相关产品推荐
相关产品推荐

