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

OOP学习阶段:List<JsonNode>处理方法的命名与单一职责设计咨询

关于OOP设计:单一函数还是拆分职责?

嘿,针对你这个处理List<JsonNode>键提取的疑问,我来分享下我的思路~

首先咱们先锚定核心需求:你需要给Component1返回所有键,给Component2返回值为数值类型的键,现在纠结是合并成一个函数还是拆分成多个符合单一职责原则(SRP)的函数。下面分两种方案给你分析:

方案1:拆分为单一职责函数(更贴合SRP)

如果严格遵循单一职责,拆分绝对是更清晰的选择——毕竟两个操作的目标完全不同:一个是无差别提取所有键,另一个是带条件筛选特定键。拆分后每个函数只干一件事,后续维护、测试、复用都更灵活。

给你推荐几个清晰的方法名:

  • 提取所有键:extractAllKeysFromJsonNodes(List<JsonNode> jsonNodes)
  • 筛选数值类型值的键:extractNumericValueKeysFromJsonNodes(List<JsonNode> jsonNodes)

如果想把这些操作归类,还可以封装成一个JsonKeyExtractor工具类,把这两个方法放在里面,既符合OOP封装思想,也让职责更集中。

这里提个小优化:第二个方法没必要先调用第一个方法拿到所有键再筛选,直接遍历每个JsonNode时判断值是否为数值类型,再提取对应键,效率会更高。

方案2:单一函数返回复合结果(适合强关联场景)

如果你的业务逻辑里,这两个提取操作总是同时触发(比如Component1和Component2每次都一起需要资源),那用一个函数返回复合结果会更高效——只需要遍历一次列表,同时收集两类数据,避免重复遍历的开销。

这种情况下,方法名要体现它的复合职责,比如:

  • extractAllAndNumericValueKeys(List<JsonNode> jsonNodes)

返回值可以用一个自定义的DTO类,比如JsonKeyExtractionResult,里面包含Set<String> allKeys和Set<String> numericValueKeys两个字段,把两类结果打包返回。

这种方式的好处是调用更简洁,性能更优,而且只要这个函数的职责定义为“为Component1和Component2提取所需键资源”,也不算违反SRP——它的单一职责就是服务这两个组件的联合需求。

怎么选?

  • 如果两个提取操作在系统中是独立使用的(比如有时候只给Component1,有时候只给Component2):果断拆分,符合SRP,代码灵活性拉满。
  • 如果两个操作强绑定、总是一起出现,且你想优化性能:选单一复合函数,兼顾效率和代码简洁性。

最后补个小提示:不管选哪种方案,方法名一定要清晰直白,别用extractKeys这种模糊的名字,要让其他开发者一眼就知道这个方法能拿到什么结果~

内容的提问来源于stack exchange,提问作者Rei Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:21:57