2013-02-28 17 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

相關問題