在控制器中组合相同流程的方法。

时间:2017-08-21 09:41:12

标签: spring oop

方法1.

@RequestMapping(value="/getProfessor")
public @ResponseBody List<Object> getMember(HttpServletRequest request){
   HttpSession session = request.getSession();
   HashMap user = (HashMap)session.getAttribute("USER_INFO");

   Map<String, Object> param = new HashMap<String, Object>();
   param.put("phone", (String)user.get("PHONE");

   ReportManager  manager = new ReportManager();

   List<Object> list = manager.getProfessor(param);
}

方法2。

@RequestMapping(value="/getMember")
public @ResponseBody List<Object> getMember(HttpServletRequest request){
   HttpSession session = request.getSession();
   HashMap user = (HashMap)session.getAttribute("USER_INFO");

   Map<String, Object> param = new HashMap<String, Object>();
   param.put("phone", (String)user.get("PHONE");

   ReportManager  manager = new ReportManager();

   List<Object> list = manager.getMember(param);
}

上面的代码简要描述了我如何获得成员和教授的名单。 除了URL和最底层的方法之外,这两种方法具有完全相同的代码流。如您所知,OOP的核心原则之一是“结合重复问题”。所以,重点是我想将这些方法合并到一个方法中。

3 个答案:

答案 0 :(得分:1)

将网址更改为更为通用的网址,例如/getUser

在请求中传递TYPEPROFESSOR/MEMBER个参数。根据{{​​1}},您可以在控制器方法中查询两种不同的方法。

答案 1 :(得分:1)

public Map<String, Object> getParams(HttpServletRequest request){
    HttpSession session = request.getSession();
    HashMap user = (HashMap)session.getAttribute("USER_INFO");

    Map<String, Object> param = new HashMap<String, Object>();
    param.put("phone", (String)user.get("PHONE");
}

@RequestMapping(value="/getProfessor")
public @ResponseBody List<Object> getMember(HttpServletRequest request){

    ReportManager  manager = new ReportManager();

    List<Object> list = manager.getProfessor(this.getParams(request));
}

@RequestMapping(value="/getProfessor")
public @ResponseBody List<Object> getMember(HttpServletRequest request){

    ReportManager  manager = new ReportManager();

    List<Object> list = manager.getProfessor(this.getParams(request));
}

答案 2 :(得分:1)

同意您的意见,根据DRY编码原则,不建议复制相同的代码。 您可以使用单个RequestMapping和某种查询参数OR 将公共代码移动到不同的方法,并从两个方法调用它。