我正在处理一个处理请求的项目,该请求有两个组件:命令和参数。每个命令的处理程序非常简单(<10行,经常<5)。至少有20条命令,可能会超过50条。
我提出了一些解决方案:
- 一个大的开关/ if-else命令
- 命令到功能的映射
- 命令到静态类/单的映射
每个命令都进行一点错误检查,唯一可以抽象的位是检查为每个命令定义的参数数量。
什么是解决此问题的最佳解决方案,为什么?我也愿意接受我可能错过的任何设计模式。
我为每个提出了以下优点/缺点列表:
开关
- 优点
- 将所有命令保持在一个功能中;由于它们很简单,因此使其成为可视化查找表
- 不需要使用大量只会在一个地方使用的小功能/类来弄乱源代码
- 缺点
- 很长
- 难以以编程方式添加命令(需要使用默认大小写进行链接)
映射命令->功能
- 优点
- 一口大小的小块
- 可以以编程方式添加/删除命令
- 缺点
- 如果在线完成,则外观与开关相同
- 如果没有在线完成,很多功能只能在一个地方使用
映射命令->静态类/单例
- 优点
- 可以使用多态来处理简单的错误检查(仅3行,但仍然)
- 与map类似的好处->功能解决方案
- 缺点
- 很多非常小的班级将使项目混乱
- 实施并非都在同一个地方,因此扫描实施并非易事
额外说明:
我正在用Go编写此代码,但是我认为解决方案不是特定于语言的。我正在寻找一个更通用的解决方案,因为我可能需要用其他语言做一些非常相似的事情。
命令是字符串,但是如果方便的话,我可以轻松地将其映射为数字。函数签名类似于:
Reply Command(List<String> params)
Go具有顶级功能,而我正在考虑的其他平台也具有顶级功能,因此第二个和第三个选项之间的区别。