发布于 2026-01-06 7 阅读
0

如何避免将 Java 类命名为带有“Manager”后缀的类?命名类——如何避免将所有内容都命名为“<WhatEver>Manager”?DEV 全球展示挑战赛,由 Mux 呈现:展示你的项目!

如何停止在 Java 类名中使用“Manager”后缀

类命名 - 如何避免将所有内容都命名为“<WhatEver>Manager”?

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

在 Java 应用程序中,几乎随处可见名为 SomethingManager 的类。账户缓存有一个 AccountCacheManager,应用程序属性有一个 ApplicationPropertiesManager,用户事务则由 UserTransactionManager 完成。

你可能曾经这样给类命名过。

请去修改一下。

“经理”这个词有什么问题?

“经理”这个后缀毫无意义。当然,你可能会说我们需要一个东西来管理另一个东西,但你这么说是什么意思?你是要给代码找个经理吗?这是在工作场所吗?你的应用程序中的对象需要老板吗?

来自《上班一条虫》的伦伯格

如何更改?

每当我在类名中看到“Manager”这个词,几乎总是觉得多余。我最近看到一个类,它管理着另一个组件的生命周期。不出所料,它的名字后缀是“LifeCycleManager”。这当然是需要把类命名为“ Manager ”的情况,对吧?毕竟,它管理的是生命周期,而这不正是我们在实际应用中会说的吗?

不!错了!

这个类有 `init`initialize()和` stop()stop` 方法。假设它“管理”的类叫做 `MyClass` 。MyComponent.实际上,直接把“管理”类命名为 `MyClass` 会更清晰易读MyComponentLifeCycle。被它“管理”的代码就变成了 `init` 和 ` MyComponentLifeCycle.initialize()stop` MyComponentLifeCycle.stop()。我可以直接初始化或停止生命周期,而且我言出必行。我不会要求管理者去做,而是自己去做。

希亚·拉博夫,就这么做吧

这个简单的理念适用于我见过的大多数Manager带有类后缀的用例。刚才,我打开了一个代码库,发现了一个ConnectionManager类。它公开了一些方法,例如`get` getConnection()configure()`get` 和 `get` close()。暂且不谈这个类或许可以重构为更合理的对象,它实际上只是保存了一个 `Object` 对象,javax.sql.DataSource并围绕它编写了一些实用代码,最终目标是为java.sql.Connection应用程序提供一个有效的 `Object` 对象。

难道不能直接调用这个类,然后DbConnection把那个返回值getConnection()的方法(java.sql.Connection顺便说一句,它返回的是一个值)改成 `__init__`get()或 `__init__`asSqlConnection()吗?这样,你就不用再用 `__init__` ConnectionManager.getConnection()(顺便说一句,它也是完全多余的),而是用 `__init__` 了DbConnection.get()。之后你再调用`__init__` DbConnection.close()。这样就不需要“管理器”了。

没有经理!

如你所见,简洁的代码不应该有管理器。管理器是多余的,也是不必要的。它并不能告诉你类实际做了什么。

我的目标是让经理们全部灭绝。谁支持我?

反对

文章来源:https://dev.to/scottshipp/how-to-stop-naming-java-classes-with-the-manager-suffix-48la