定义
在面向对象编程领域,上帝对象(God object)是一个了解过多或者负责过多的对象。 上帝对象是 反模式(anti-pattern) 和 代码异味(code smell)的例子。
全能的上帝
笔者曾在某个项目遇到了这种"上帝"工具类Helper
和Tools
,里面涵盖的功能真是五花八门,UI快捷设置、时间戳的各种扩展、数据的验证、对应的业务逻辑等等。
犹如工具类的跳蚤市场,新旧API集聚于此,少则几千行,多则上万,里面的工具函数真是的是无所不知,无所不能,但是想要驾驭上帝,确实太难了~
是什么造就了上帝?
出现这种问题基本都是一下几点
- 工具类的职责没有统一的规划
- 缺少公共组件的维护
- 向工具类中添加函数无限制
最重要的原因是公共组件并没有受到重视,慢慢就会变成整个项目中随意丢弃烂代码的垃圾站。
总结
工具类中的API变动应该是缓慢的,判断是否应该向工具类中添加函数可从一下几条进行判断
- 不涉及具体模块的业务逻辑
- 通用性强
- 可写成扩展方法
- 其函数所需要的依赖是稳定性依赖
- 原始工具类中的职责与其相关
- 其复杂性不能通过简单几行代码代替