Java 在控制器或服务中,将业务逻辑放在何处?
我正在开发一个SpringWebMVC应用程序。我有与CRUD或复杂操作相关的查询 我的问题是我们的逻辑应该放在哪里,在控制器层还是在服务层 目前,我正在控制器中编写所有代码,并在Java 在控制器或服务中,将业务逻辑放在何处?,java,spring-mvc,spring-data-jpa,Java,Spring Mvc,Spring Data Jpa,我正在开发一个SpringWebMVC应用程序。我有与CRUD或复杂操作相关的查询 我的问题是我们的逻辑应该放在哪里,在控制器层还是在服务层 目前,我正在控制器中编写所有代码,并在控制器中调用save()或delete()方法service 请参见下面的代码示例。请帮我找到正确的编码方法 控制器级别: @控制器 @请求映射(value=“/Shipping”) 公共类发货控制器{ @自动连线 私人运输服务; @RequestMapping(value=“/addNewShippingMethod
控制器中调用save()
或delete()
方法service
请参见下面的代码示例。请帮我找到正确的编码方法
控制器级别:
@控制器
@请求映射(value=“/Shipping”)
公共类发货控制器{
@自动连线
私人运输服务;
@RequestMapping(value=“/addNewShippingMethod/{id}”,method=RequestMethod.POST)
公共字符串addshippingMethod(@PathVariable(“id”)字符串id,HttpServletRequest){
配送=新配送();
shipping.setName(request.getParameter(“name”));
shippingService.save(发货);
返回“/装运/装运方法列表”;
}
}
@服务
公营船务{
@自动连线
私人发货方法position shipping方法position;
公共模型和视图保存发货方法(HttpServletRequest请求,字符串id){
shippingMethodRespository.save(发货);
}
}
服务级别:
@控制器
@请求映射(value=“/Shipping”)
公共类发货控制器{
@自动连线
私人运输服务;
@RequestMapping(value=“/addNewShippingMethod/{id}”,method=RequestMethod.POST)
公共ModelAndView addshippingMethod(@PathVariable(“id”)字符串id,HttpServletRequest){
返回shippingService.saveShippingMethod(请求,id);
}
}
@服务
公营船务{
@自动连线
私人发货方法position shipping方法position;
公共模型和视图saveShippingMethod(HttpServletRequest请求,字符串id){
配送=新配送();
shipping.setName(request.getParameter(“name”));
shippingMethodRespository.save(发货);
ModelAndView发货方法页面=新建
ModelAndView(“/Shipping/ShippingMethodList”);
退运方式;
}
}
我已经描述了这两种场景,第一种是:我们保存来自控制器的所有数据并返回页面
第二种是:使用控制器重定向和写入逻辑,并将数据保存在服务层
您能告诉我哪种方法是编写代码的最佳方法吗?是的,您可以收集一些关于何时使用服务层的知识?你可以从或开始
现在,如果我们看一下您问题中提到的两种方式,那么它表示在第一种情况下,“在控制器中编写业务逻辑”不是您应该采取的方式
所以我肯定会投票支持第二部分,因为当你有服务层的时候,你应该把你的业务逻辑写在那里
@控制器
@请求映射(value=“/Shipping”)
公共类发货控制器{
@自动连线
私人运输服务;
@RequestMapping(value=“/addNewShippingMethod/{id}”,method=RequestMethod.POST)
公共ModelAndView addshippingMethod(@PathVariable(“id”)字符串id,HttpServletRequest){
返回shippingService.saveShippingMethod(请求,id);
}
}
@服务
公营船务{
@自动连线
私人发货方法position shipping方法position;
公共模型和视图saveShippingMethod(HttpServletRequest请求,字符串id){
配送=新配送();
shipping.setName(request.getParameter(“name”));
shippingMethodRespository.save(发货);
ModelAndView发货方法页面=新建
ModelAndView(“/Shipping/ShippingMethodList”);
退运方式;
}
}
@dushyantankariya我想这和我的问题不一样。因为他们只讨论了依赖性。你知道我的问题plz吗?@mark Rotterveel所以控制器的角色只是处理请求和路由到特定路径,对吗?而服务层正在处理所有事务和业务逻辑,对吗?@BwtDeveloper为什么你要告诉我,你是不是打算改为处理Dushyant?是的@BwtDeveloper,你明白了。当我们有一个预制的应用程序(配置了jhipster),并且每个jpa实体都有自己的关联控制器/服务/存储库时,该怎么办?我的意思是,要实现一些复杂的业务逻辑,需要从不同的存储库中提取数据并最终返回结果,有什么好策略?thanksHi@Funder,很抱歉延迟回复。当使用jhipster进行配置时,每个jpa实体都有自己的关联控制器/服务/存储库,然后使用该默认体系结构实现业务逻辑-建议的。也许任何体系结构都可以扩展,你可以改变jhipster创建的架构师,构建自己的体系结构——我不建议这样做,除非完全了解项目架构师。