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

Guidewire中Gosu方法:Property与Function的区别及适用场景

Guidewire Gosu中Function与Property的适用场景区分

一、Property的适用场景

  • 表示对象的固有状态或派生状态:比如保单的EffectiveDate(固有属性)、TotalPremium(从保单明细汇总的派生值),调用时直接用policy.TotalPremium,语法和访问普通字段一致,语义更贴合“对象属性”的认知。
  • 无参数、幂等且无副作用的逻辑:多次调用结果完全一致,不会修改任何数据,也不依赖对象自身以外的可变状态。比如判断保单是否过期的IsExpired,逻辑仅依赖保单到期日和当前日期,无额外参数。
  • 简单计算逻辑:逻辑简短直接,语义上更偏向“描述对象的某个特征”而非“执行一个操作”。

二、Function的适用场景

  • 需要输入参数才能完成逻辑:比如根据指定日期计算保单风险等级的CalculateRiskLevel(asOfDate: Date),必须传入参数才能得到对应结果。
  • 存在副作用的操作:比如修改对象属性、调用外部API、写入数据库的逻辑,比如UpdatePaymentStatus(newStatus: String),这类逻辑明确是“执行一个动作”,而非获取属性。
  • 复杂计算或非幂等逻辑:比如调用外部费率引擎计算保费(依赖外部服务状态,多次调用结果可能不同),或者包含多分支、多步骤的复杂逻辑,语义上更偏向“执行一个操作”。

三、获取数据时的选择原则

优先用Property的情况

  • 数据是对象的固有属性或直接派生属性:比如获取保单投保人姓名PolicyHolderName、从账户交易记录汇总的CurrentBalance,这些数据不需要额外参数,属于对象自身的特征。
  • 数据获取逻辑无参数、无副作用且幂等:只要对象自身状态不变,多次调用返回结果完全一致,比如OutstandingAmount(从未结清账单计算的金额)。

优先用Function的情况

  • 需要动态参数过滤或指定数据范围:比如获取指定时间段内的理赔记录GetClaimsForPeriod(startDate: Date, endDate: Date),必须传入参数才能返回符合条件的数据。
  • 数据获取依赖外部服务或可变状态:比如调用第三方接口获取客户信用评分GetCustomerCreditScore(customerId: String),结果可能随外部系统状态变化。
  • 数据获取逻辑复杂或有性能优化需求:比如涉及多表关联、复杂条件过滤的查询,用Function可以明确这是一个需要执行的查询操作,也便于后续添加缓存、异步执行等优化逻辑。

内容的提问来源于stack exchange,提问作者Sathis K N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:56:02