用函数替代硬编码逻辑实现业务规则可插拔,通过高阶函数抽象流程骨架,用函数组合构建声明式DSL,利用闭包捕获上下文避免参数污染。
用函数替代硬编码逻辑,让业务规则可插拔
把具体业务动作封装成独立函数,而不是散落在 if-else 或 switch 中。比如订单状态变更,不写 if status == "paid" then sendemail(),而是定义 onpaid: () -> void 这样的函数类型字段。业务流程只需调用 currenthandler(),真正执行什么由外部注入决定。这样换渠道、改策略时,只替换函数值,不动主干代码。
用高阶函数统一抽象流程骨架
将重复的执行模式(如前置校验 → 执行核心 → 后置通知 → 日志记录)抽成一个高阶函数,例如:
fun executeWithLifecycle(core: () -> Result, before: () -> Unit, after: (Result) -> Unit): Result
业务方只需传入自己的 core、before、after 函数,整个流程自动组装。不同场景复用同一骨架,差异仅在传入的函数行为上,结构清晰且零重复。
用函数组合构建声明式 DSL
把单个函数看作原子操作单元,通过 .andThen()、.compose() 或自定义中缀函数拼接。例如:
validateOrder.andThen(applyDiscount).andThen(persistToDB)
这一行就是完整业务流的“声明”,不是执行步骤,而是描述“要做什么”。后续可加监控钩子、熔断包装、异步调度等,都不影响原始表达——因为所有增强都作用于函数本身,而非调用位置。
用闭包捕获上下文,避免参数传递污染
函数能携带环境,就不用把 session、config、logger 等层层透传。比如创建一个 createOrderProcessor(env: Env),它返回的函数内部已闭包持有 env.db 和 env.logger。调用端只关心 processor(orderData),完全不知道底层依赖。这使业务函数天然隔离、可测试、易复用。










