0

我正在结合 Spring Security 在 Spring MVC 中构建一个 Web 应用程序。我的问题是关于应用程序的内部设计。更具体地说 - 如何设置控制器。Pet Clinic 示例给我很大启发,其中每个域对象(所有者控制器、宠物控制器、兽医控制器等)都有一个控制器。

我想为我的应用程序引入一个管理后端界面。这意味着在每个控制器中创建特定于管理员的方法和 @RequestMappings。请求映射路径由intercept-url 模式保护,所以我不必关心它们在哪里。但是我发现这个解决方案有点不雅。

在宠物诊所的例子中,它看起来像:

@Controller
@SessionAttributes(types = Owner.class)
public class OwnerController {

   private final ClinicService clinicService;

   // Front end method
   @RequestMapping(value = "/owners/find", method = RequestMethod.GET)
   public String initFindForm(Map<String, Object> model) {
      model.put("owner", new Owner());
      return "owners/findOwners";
   }


   // Admin method
   @RequestMapping(value = "/admin/owners/find", method = RequestMethod.GET)
   public String initFindForm(Map<String, Object> model) {
       model.put("owner", new Owner());
   //Admin view
       return "admin/owners/findOwners";
  }

}

另一种选择是为每个 @RequestMapping (或每个操作)设置一个控制器

 @Controller
 @RequestMapping(value = "/admin", method = RequestMethod.GET)
 public class AdminController {

    private final ClinicService clinicService;

    // Admin method
    @RequestMapping(value = "/owners/find", method = RequestMethod.GET)
    public String initFindForm(Map<String, Object> model) {
        model.put("owner", new Owner());
        //Admin specific view
        return "admin/owners/findOwners";
    }

  }

在我看来,这将导致具有多种方法的真正强大的控制器。

第三种选择是混合使用这些。

  @Controller
  @SessionAttributes(types = Owner.class)
  public class AdminOwnerController {

    private final ClinicService clinicService;

    // Admin method
    @RequestMapping(value = "/admin/owners/find", method = RequestMethod.GET)
    public String initFindForm(Map<String, Object> model) {
        model.put("owner", new Owner());
       //Admin view
       return "admin/owners/findOwners";
}

}

我的问题是什么是标准方法?

4

1 回答 1

1

通常我使用 AdminOwnerController 的混合方法,其中每个控制器最多有大约 5-10 个方法。

如果您最终每个控制器有 1-2 个方法。我会考虑根据管理域将它们组合在一起。

于 2013-10-17T14:54:19.030 回答