Angular中精简Buyout和Sale类交易payload与dealTypeValues声明的优化方案
代码精简优化方案
核心优化思路
将重复的公共字段、差异化的类型配置、重复的请求逻辑分别抽离,消除冗余代码,提升可维护性。
优化后的TS代码
首先在组件类中预定义交易类型配置映射:
// 交易类型配置,后续新增类型仅需在此处扩展 private readonly DEAL_TYPE_CONFIG = { Buyout: { dealTypeName: 'Idle Buyout', getFields: (formFields: any) => ({ summary: formFields.summary, terminationPayment: formFields.terminationPayment, effectiveDate: AppUtils.convertDateStringToYYYYMMDD(formFields.effectiveDate), totalBrokerCommission: formFields.totalBrokerCommission }) }, Sale: { dealTypeName: 'Idle Sale', getFields: (formFields: any) => ({ salePrice: formFields.salePrice, brokerCommission: formFields.brokerCommission, transactionCosts: formFields.transactionCosts, earnestMoneyDeposit: formFields.earnestMoneyDeposit, inspectionPeriod: formFields.inspectionPeriod, estimatedClosingDate: AppUtils.convertDateStringToYYYYMMDD(formFields.estimatedClosingDate), netBookValue: formFields.netBookValue }) } }
重写saveDeal方法,删除重复的createDispositionDeal、updateDispositionDeal方法:
saveDeal() { const dealType = this.dealDispositionFormFields.dealDispositionType; // 非法交易类型直接拦截 if (!this.DEAL_TYPE_CONFIG[dealType]) return; const { dealTypeName, getFields } = this.DEAL_TYPE_CONFIG[dealType]; // 构造dealTypeValues const dealTypeBase = { name: this.dealDispositionFormFields.dealName, ...getFields(this.dealDispositionFormFields) }; const dealTypeValues = this.isExistingDeal ? { ...dealTypeBase, id: this.dealData.dealTypeValues.id, dealId: this.dealData.dealTypeValues.dealId, } : { ...dealTypeBase, id: 0, dealId: 0, }; // 构造公共payload基础字段 const basePayload = { name: this.dealDispositionFormFields.dealName, dealType: dealTypeName, annualRentProposed: null, annualRentCurrent: null, firmTermRemaining: null, firmTermAdded: null, maxAvailableTerm: null, capitalContribution: null, parentCloneId: null, accountId: this.currentAccount.accountId, transactionId: this.transactionData.id, dealTypeValues: JSON.stringify(dealTypeValues) }; // 合并新建/更新的差异化字段 const payload = this.isExistingDeal ? { ...basePayload, id: this.dealData.id, status: this.dealData.status } : { ...basePayload, id: 0, status: null }; // 统一处理请求 const requestObservable = this.isExistingDeal ? this._dealService.updateDeal(payload) : this._dealService.createDeal(payload); requestObservable.subscribe({ next: () => { const successMsg = this.isExistingDeal ? '交易更新成功' : '交易创建成功'; this._notificationService.showSuccess(successMsg); this.gotoManageDealsEvent.emit(''); }, error: () => console.log('交易处理失败') }) }
优化说明
- 所有交易类型的差异化配置统一维护,后续新增交易类型无需修改核心逻辑,仅需扩展配置项即可
- 完全消除了重复的
payload、dealTypeValues声明,公共字段仅需定义一次,后续迭代修改成本极低 - 合并了创建、更新的请求逻辑,删除了重复的订阅回调代码
- 整体代码量减少70%以上,逻辑分层清晰,可维护性大幅提升
内容的提问来源于stack exchange,提问作者Ananya Amar
相关产品推荐
相关产品推荐

