OOP设计疑问:ManageMonster类的解析逻辑是否应拆分至ManageMonsterParser类?
拆分命令行解析逻辑,遵循单一职责原则重构ManageMonster类
你的思路完全正确——命令行参数解析不属于ManageMonster的核心职责,拆分到独立的ManageMonsterParser类能让代码更清晰,严格遵循单一职责原则(SRP)。以下是具体的重构方案:
1. 实现独立的参数解析类ManageMonsterParser
把原ManageMonster中的parse_args逻辑迁移到这个类中,让它专门负责解析命令行参数并暴露结构化的结果:
class ManageMonsterParser attr_reader :monster_id, :action, :status, :game_server def initialize(cmd_args) parse_args(cmd_args) end private def parse_args(cmd_args) # 这里放入原来的长解析代码 # 示例解析逻辑(根据实际参数格式调整): options = OptionParser.new do |opts| opts.on("-m", "--monster-id ID", "怪物ID") { |id| @monster_id = id } opts.on("-a", "--action ACTION", "操作类型:level_up/update_status/take_picture") { |act| @action = act.to_sym } opts.on("-s", "--status STATUS", "状态值:sick/hungry/healthy") { |stat| @status = stat.to_sym } opts.on("-g", "--game-server SERVER", "游戏服务器地址") { |server| @game_server = server } end.parse!(cmd_args) end end
2. 重构ManageMonster类
让ManageMonster依赖ManageMonsterParser实例,专注于怪物管理的核心业务逻辑,不再处理参数解析:
class ManageMonster attr_accessor :monster_id, :status, :game_server def initialize(parser) @monster_id = parser.monster_id @status = parser.status @game_server = parser.game_server # 其他初始化逻辑(比如连接游戏服务器等) end def update_status(monster_id, status) # 调用API更新怪物状态的业务逻辑 puts "更新怪物#{monster_id}状态为#{status}" end def level_up(monster_id) # 怪物升级的业务逻辑 puts "怪物#{monster_id}升级成功" end def take_picture(monster_id) # 获取怪物坐标、外观并生成照片的业务逻辑 puts "为怪物#{monster_id}生成照片并保存" end # 根据解析结果执行对应操作 def execute_action(parser) case parser.action when :level_up level_up(parser.monster_id) when :update_status update_status(parser.monster_id, parser.status) when :take_picture take_picture(parser.monster_id) else puts "不支持的操作类型:#{parser.action}" end end end
3. 调用方式
在终端入口处,先解析参数,再初始化业务类执行操作:
# 终端执行脚本的入口逻辑 parser = ManageMonsterParser.new(ARGV) manager = ManageMonster.new(parser) manager.execute_action(parser)
重构后的优势
- 职责清晰:
ManageMonster只处理怪物的业务操作,ManageMonsterParser只处理参数解析,符合SRP - 可维护性提升:修改解析规则或业务逻辑时,无需改动另一个类
- 可测试性增强:可以单独测试解析逻辑,也可以通过Mock解析器来测试业务逻辑的各种场景
内容的提问来源于stack exchange,提问作者joyfuljoy
相关产品推荐
相关产品推荐

