You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:45:05