SuperAPI AI 工具集

strategy-factory-null-calculator

编程与开发

查看项目

更新于 10-16 06:17

技能介绍

用途:实现基于变体的计算器体系,对外提供单一入口 Calculator::Factory.for(entity).calculate。工厂依据实体变体选择具体策略类;NullService 作为空对象处理不支持的变体,安全返回 nil 而不抛错。

主要能力与结构:工厂负责从实体变体选类并返回实例或 NullService;BaseService 承载通用 calculate 流程、守卫与对 compute_result 的调用;NullService 不计算、安全返回 nil;具体服务在 should_calculate? 中写变体条件、在 compute_result 中写逻辑。文件结构位于 app/services/<calculator_name>/,含 factory.rb、base_service.rb、null_service.rb、各具体服务与 README。工厂规则:无合格上下文用 NullService;变体不在 SERVICE_MAP 用 NullService;多匹配时首个命中优先,偏好顺序在 SERVICE_MAP 中定义,SERVICE_MAP 需 freeze。

使用方式:客户端只需调用 EligibilityDateCalculator::Factory.for(animal).calculate,避免调用方散落条件分支。子类继承 BaseService,覆写 should_calculate?(可调用 super 再加变体条件)与 compute_result,不要整体覆写 calculate。

测试与流程:采用硬门禁——测试先于实现。每个组件(Factory、BaseService、NullService、具体服务)先写 spec 并验证因组件不存在而失败,再实现,按 Factory→BaseService→NullService→具体服务顺序推进。Factory 需覆盖 nil shelter、无程序、各变体和多变体分支;NullService 路径必须有用例;具体服务验证守卫仅在变体适用时为真。可用 FactoryBot 构造实体,用 travel_to 处理时间依赖计算。

适用场景:结果依赖上下文变体(程序、租户、套餐类型等),且各变体逻辑不同、需归类分离,同时需要安全回退时。

限制与注意:客户端不应使用 case/when 代替工厂;NullService 不应抛错;SERVICE_MAP 的字符串键必须与数据库存储值精确匹配;每个变体应有独立 spec 上下文。可关联 ruby-service-objects、rspec-service-testing、rspec-best-practices 等技能链。安装命令、收费与平台信息暂未提供。