5

我有两个名为PowerUserManagerand的服务 bean SimpleUserManager。两个@Service带注释的类有大约20% 的共同代码

我用一个通用抽象类 ( BaseUserManager) 构建了一个继承树,以减少两个类之间的冗余。

                               BaseUserManager
                                      |
                               ---------------
                               |             |
                       PowerUserManager  SimpleUserManager

然后在我的@Controller或任何客户端类中,我使用@Autowired注释来注入两者PowerUserManagerSimpleUserManager并且我根据我正在处理的用户实例使用其中一个。

我不习惯使用继承来分解代码,尤其是在服务层中。你们春天的伙伴们有没有更好的方法来做到这一点?

4

1 回答 1

3

在这种情况下考虑继承而不是组合之前,您应该问自己一些基本问题,一般来说

  1. 所有用户管理器都是 BaseUserManager 吗?在任何可能的情况下,这是一种 IS-A 关系吗?
  2. 在涉及用户管理器的任何地方公开 BaseUserManager 公共 API 是否有意义?
  3. BaseUserManager 是否有单一职责?

如果答案是肯定的,那么继承是正确的方法。否则,您可能应该重新设计成几个更小的组件,并将 PowerUserManager 和 SimpleUserManager 视为服务外观。

于 2013-03-01T08:50:30.123 回答