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
相关产品推荐
相关产品推荐

