2013-02-28 56 views
3

我有两个叫做PowerUserManagerSimpleUserManager的服务bean。 @Service注释类有约有20%的共同代码在spring服务层中使用继承是否是最佳做法?

我已经构建了一个继承树,它具有共同的摘要类(BaseUserManager)以减少两个类之间的冗余。

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

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

我不习惯使用继承来分解代码,特别是在服务层。你们春天的朋友们看到了一个更好的方式来做到这一点吗?

+0

公共接口是相同的,有不同的行为,还是他们有不同的方法只适用于每种类型的用户? – Romski 2013-03-01 06:22:13

+0

@Romski PowerUserManager有不同的方法,只适用于PowerUser – webpat 2013-03-05 00:31:38

回答

2

你应该问自己一些基本的问题考虑继承在这种情况下组成and in general前:

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

如果答案是肯定的,那么继承是正确的选择。否则,你应该重新设计成几个较小的组件,并将PowerUserManager和SimpleUserManager作为服务外观。

+0

对于BaseUserManager来说,单一责任意味着什么? – webpat 2013-03-05 00:32:50

+0

BaseUserManager是否遵循OOP的原则,或者它是一个凌乱的实用程序类,它只是简化了其他管理器中的常见用例?例如,如果BaseUserManager将负责:权限和角色管理,注册,帐户激活,帐户列表和制作咖啡,那么将这些任务委派给一组更专业的组件可能是一个好主意。 – 2013-03-05 09:15:39

相关问题