Alternatives to “Manager” Java
我目前在一个项目中有几个"管理者"类,但是我看到了很多建议你不要使用管理者类的东西,但是在我的情况下似乎没有提供任何选择。我有一个clickManager,它包含一个"可单击"对象的映射,还有一个configmanager,负责加载和保存配置文件,因为config类来自我正在使用的API,它太笨了,无法加载自己。
在这些情况下,使用"管理器"有哪些选择?
- 如果使用"manager",您的意思是单例对象-这样做没有什么错。
- 如果单击管理器的唯一功能是包含对象,则更好的名称是"ClickableContainer",因为它更好地描述了它的功能。如果它对它们执行函数,则将其放入类名中。对于您的配置管理器,也许可以查看Spring或其他IOC框架来配置对象,从而提供更好的解决方案。否则,像"configurationpersister"这样的东西可以更好地描述它的功能。
- 相关:如何避免将每件事都称为"经理"?
沃德坎宁安曾经说过(1)每个程序员都应该在他或她的办公桌上放一本字典和一本词典。还有一种说法是计算机科学中只有两个难题:缓存失效和命名。(2)
重点是命名事物很重要,很难,而且常常被忽视。这就是为什么在许多代码基周围都有名为Data和Manager的类。
这里至少发生了两件事。一个是类正在做一些合理的事情,它只需要有一个好的,简洁的,描述性的名字应用到它。例如,对于ClickManager,它是否向可单击对象发送事件?如果是的话,可能是一个Dispatcher。它是否列出了可点击的对象?可能是一个Positioner。它是否包含可点击的对象(如erwin bolwidt建议的那样)?可能是一个Container。它是否执行了响应点击的操作?可能是一个InteractiveCommand。有时,更具体地思考一个班级在做什么,以便想出一个好名字是很有帮助的。
另一种可能是班级的责任太多,即违反了单一责任原则。这常常是一些难以命名的东西的原因,因为它做了很多不同的事情。假设类同时包含可点击的对象,向它们发送事件,定位它们,并执行命令。难怪除了Manager之外,很难找到其他名称,因为它执行所有这些相关但独立的功能。(请注意,在许多UI工具包中,这些职责被分为不同的类。)
如果是这样的话,最好将一个大的Manager类重构成更小的类,每个类的职责都更少(或一个)。应该更容易为这些类找到更好的名称。
(1)我想大概是十年前在一个OOPSLA。
(2)一次出错。