Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在控制器或服务中,将业务逻辑放在何处?_Java_Spring Mvc_Spring Data Jpa - Fatal编程技术网

Java 在控制器或服务中,将业务逻辑放在何处?

Java 在控制器或服务中,将业务逻辑放在何处?,java,spring-mvc,spring-data-jpa,Java,Spring Mvc,Spring Data Jpa,我正在开发一个SpringWebMVC应用程序。我有与CRUD或复杂操作相关的查询 我的问题是我们的逻辑应该放在哪里,在控制器层还是在服务层 目前,我正在控制器中编写所有代码,并在控制器中调用save()或delete()方法service 请参见下面的代码示例。请帮我找到正确的编码方法 控制器级别: @控制器 @请求映射(value=“/Shipping”) 公共类发货控制器{ @自动连线 私人运输服务; @RequestMapping(value=“/addNewShippingMethod

我正在开发一个SpringWebMVC应用程序。我有与CRUD或复杂操作相关的查询

我的问题是我们的逻辑应该放在哪里,在控制器层还是在服务层

目前,我正在控制器中编写所有代码,并在
控制器中调用
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创建的架构师,构建自己的体系结构——我不建议这样做,除非完全了解项目架构师。