带/不带特定类实现的设计接口

问题描述:

好吧,我正在设计一个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

我建议你看看一些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