2013-07-10 61 views
3

我的項目在目前的工作,利用私人訪問修飾符爲MVC控制器的方法:最佳實踐,以保持方法能見度春@Controller刻板印象

@Controller 
public class HelloWorldController { 

    @RequestMapping("/helloWorld") 
    private ModelAndView helloWorld() { 

我已經集成PMD和他的報告有很多:

/src/main/java/com/web/controller/SignalController.java:91: Avoid unused private 
              methods such as 'handleNewRequest()'. 

所以不是禁止有用的PMD規則,我認爲到控制器的方法可視性更改爲公共

是否有任何理由保持控制器的方法私人

+3

它不僅毫無意義(至少在我看來),但它也意味着它們沒有被測試。 Spring價值的一部分(它能夠以它的方式返回數據)是你可以非常容易地單元測試你的控制器,而不必擔心原始的HTML解析(或其他醜陋的策略)。 –

+0

同意科林。在保持控制器方法私密的情況下似乎沒有任何價值。一般來說,測試私人方法需要反思,並且是一種痛苦。如果你必須測試私有方法,你可以使用像JMockit的[Deencapsulation](http://jmockit.googlecode.com/svn/trunk/www/javadoc/mockit/Deencapsulation.html)util。 – Durandal

+1

我們使用** SpringJUnit4ClassRunner **與** HandlerAdapter **和** MockHttpServletRequest ** + ** MockHttpServletResponse **。因此保持私有方法不會讓測試變得不可能)) – gavenkoa

回答

2

你通過使私人搬起石頭砸自己的腳:

  1. 它看作是PMD和閒置的IDE(和傳遞性,其他所有的私人它調用的方法,太)。所以你或同事可能會錯誤地刪除實際使用的私有方法。
  2. 它使得單元更難測試它們。
  3. 這是非常規的,使你的代碼看起來很古怪的經驗豐富的Spring開發人員。
  4. 它們在邏輯上是公共的,因爲它們被類和包之外的代碼調用。
+0

我已經看到自動連線的依賴關係在一個私有的@RequestMapping方法內是'null',並且當我將它公開時,依賴關係是可用的。 – VPK