关于OOP:”管理者”Java的替代方案

Alternatives to “Manager” Java

我目前在一个项目中有几个"管理者"类,但是我看到了很多建议你不要使用管理者类的东西,但是在我的情况下似乎没有提供任何选择。我有一个clickManager,它包含一个"可单击"对象的映射,还有一个configmanager,负责加载和保存配置文件,因为config类来自我正在使用的API,它太笨了,无法加载自己。

在这些情况下,使用"管理器"有哪些选择?


沃德坎宁安曾经说过(1)每个程序员都应该在他或她的办公桌上放一本字典和一本词典。还有一种说法是计算机科学中只有两个难题:缓存失效和命名。(2)

重点是命名事物很重要,很难,而且常常被忽视。这就是为什么在许多代码基周围都有名为DataManager的类。

这里至少发生了两件事。一个是类正在做一些合理的事情,它只需要有一个好的,简洁的,描述性的名字应用到它。例如,对于ClickManager,它是否向可单击对象发送事件?如果是的话,可能是一个Dispatcher。它是否列出了可点击的对象?可能是一个Positioner。它是否包含可点击的对象(如erwin bolwidt建议的那样)?可能是一个Container。它是否执行了响应点击的操作?可能是一个InteractiveCommand。有时,更具体地思考一个班级在做什么,以便想出一个好名字是很有帮助的。

另一种可能是班级的责任太多,即违反了单一责任原则。这常常是一些难以命名的东西的原因,因为它做了很多不同的事情。假设类同时包含可点击的对象,向它们发送事件,定位它们,并执行命令。难怪除了Manager之外,很难找到其他名称,因为它执行所有这些相关但独立的功能。(请注意,在许多UI工具包中,这些职责被分为不同的类。)

如果是这样的话,最好将一个大的Manager类重构成更小的类,每个类的职责都更少(或一个)。应该更容易为这些类找到更好的名称。

(1)我想大概是十年前在一个OOPSLA。

(2)一次出错。