2012-04-04 92 views
0

好吧,我正在設計一個Web應用程序。所以我正在創建控制器,首先我用這個方法簽名創建接口。帶/不帶特定類實現的設計接口

public String user(String code); 

在實現中我使用的是spring,所以爲了返回值需要傳遞第二個參數來存儲值,像這樣。

public String user(Model model, String code){ 
     String name = userservice.findUserName(code); 

     model.addAttribute(name); 
     return "userView"; 
} 

好了,你可以看到有一個問題,因爲我實現類未覆蓋在接口中的方法,但我不想參數和相關性添加到界面項目,因爲我想接口(設計)是技術中立的。

希望有人能給我一些建議。謝謝。

+0

「我不想向接口項目添加參數和依賴項」,這句話需要澄清。通常在春季,一旦你定義了一個控制器方法,你可以添加一個註釋將它連接到一個RequestMapping。我們可以討論這個問題,但是這聽起來像是你希望你的控制器沒有這種配置?這句話讓人很不清楚。 – 2012-04-04 20:54:31

+0

你說得對,我的問題不清楚。我想要的是爲web層設計我的接口,但不包括來自框架(如spring)的特定類,而是允許實現的人使用任何技術決定使用的接口。 – OJVM 2012-04-09 15:26:41

回答

3

我建議你看看一些example Spring MVC apps獲得編碼約定的想法,等

控制器不容易被寫入接口 - 我從來沒有見過它無論如何做。你想要你的服務和DAO類。

因此,您的用戶方法代碼看起來像經典服務層,但命名約定通常更像getUsergetUserForId。所以,如果你從控制器然後再調用這個你不必擔心Model ARG,像這樣:

model.addAttribute("user", userService.getUserForId(code)); 

其中userService被定義爲:

@Inject 
UserService userService; 

UserService是接口和userService由Spring/IoC容器自動注入實現。

+0

我已經看到,web層(控制器)通常不是通過接口設計的,我不明白,因爲它應該是一個很好的做法(就像在服務或數據層中一樣)。我想這樣做,因爲我的系統會有一些視圖(jsp's),但也會向其他系統提供一些服務(可能很有可能),所以我想抽象出主要操作,但不包括特定的技術。 – OJVM 2012-04-09 15:38:28

+0

控制器往往是通路特定的。我認爲你真正想要的是爲你的服務定義接口?正如nickdos在這裏所描述的那樣,這些服務對框架是不可知的。把控制器想象成「網絡控制器」,其中他們的特定功能是接受網絡請求,調用相應的服務,並打包Web響應。 – 2012-04-09 17:05:56

+0

坦克你的答案,我正在實踐這些概念。 – OJVM 2012-06-05 14:24:59