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

Python方法中if-elif-else多分支重复代码重构方案咨询

优化思路

你这个场景属于典型的多分支固定映射逻辑,不需要引入重量级设计模式,直接用字典映射表就能完全消除重复代码,后续维护也更方便。

重构后代码

def get_params_in_string(params):
    # 所有业务对象、对应方法的映射关系集中维护
    OBJ_CONFIG = {
        'AccountAnalysisW': (AccountAnalysis, 'BuhReports.GetAccountAnalysis'),
        'АнализСчетаW': (AccountAnalysis, 'BuhReports.GetAccountAnalysis'),
        'TurnoverSheetW': (TurnoverSheet, 'BuhReports.GetTurnoverSheet'),
        'ОборотнаяВедомостьW': (TurnoverSheet, 'BuhReports.GetTurnoverSheet'),
        'CardAccountW': (CardAccount, 'BuhReports.GetCardAccount'),
        'КарточкаСчетаW': (CardAccount, 'BuhReports.GetCardAccount'),
        'MutualSettlementsW': (MutualSettlements, 'BuhReports.GetMutualSettlements'),
        'ВзаиморасчетыW': (MutualSettlements, 'BuhReports.GetMutualSettlements'),
        'JournalVoucherW': (JournalVoucher, 'BuhReports.GetJournalVoucher'),
        'ЖурналОрдерW': (JournalVoucher, 'BuhReports.GetJournalVoucher'),
        'WarehouseCompareW': (WarehouseCompare, 'BuhReports.GetWarehouseCompare'),
        'СверкаСкладаW': (WarehouseCompare, 'BuhReports.GetWarehouseCompare'),
        'DebtsW': (Debts, 'MutualSettlements.DebitorsAndCreditors'),
        'ДолгиW': (Debts, 'MutualSettlements.DebitorsAndCreditors'),
    }
    obj_name = params.PrefetchMethod.split('.')[0]
    
    if obj_name not in OBJ_CONFIG:
        raise Exception('Unexpected call')
    
    obj_class, method_name = OBJ_CONFIG[obj_name]
    obj = obj_class(None, params, None, None)
    obj.prepare_filters()
    params.Put('PrefetchMethod', method_name, sbis.FieldType.ftSTRING)
    return JournalVoucher.GetParamsInString(params)

方案优势

  • 所有映射规则集中管理,后续新增业务类型只需要在OBJ_CONFIG里加一条记录,不需要修改逻辑分支
  • 完全消除了重复的elif判断和实例化代码,整体代码量减少近50%
  • 业务行为和原有代码完全一致,没有侵入性改动
  • 比策略模式更轻量,适合当前固定映射的简单场景

内容的提问来源于stack exchange,提问作者Eugene B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:02