我正在开发一个Spring Web MVC应用程序。我有一个与CRUD或复杂操作相关的查询。
我的问题是逻辑放在控制器还是服务层?
目前,我将所有代码编写在控制器中,并在控制器中调用service的save()或delete()方法。
请参见下面的代码示例。请帮助我找到正确的编码方式。
最初的回答:对于这个问题,通常建议将业务逻辑放在服务层中,而不是控制器中。这样可以使控制器更加简洁和易于维护,并且可以在多个控制器之间共享相同的服务方法。在服务层中实现业务逻辑也可以更好地支持单元测试和集成测试。因此,您可以尝试将您的业务逻辑从控制器移动到服务层中。
我的问题是逻辑放在控制器还是服务层?
目前,我将所有代码编写在控制器中,并在控制器中调用service的save()或delete()方法。
请参见下面的代码示例。请帮助我找到正确的编码方式。
控制器级别:
最初的回答:对于这个问题,通常建议将业务逻辑放在服务层中,而不是控制器中。这样可以使控制器更加简洁和易于维护,并且可以在多个控制器之间共享相同的服务方法。在服务层中实现业务逻辑也可以更好地支持单元测试和集成测试。因此,您可以尝试将您的业务逻辑从控制器移动到服务层中。
@Controller
@RequestMapping(value = "/Shipping")
public class ShippingController {
@Autowired
private ShippingService shippingService;
@RequestMapping(value = "/addNewShippingMethod/{id}", method = RequestMethod.POST)
public String addshippingMethod(@PathVariable("id") String id, HttpServletRequest request) {
Shipping shipping=new Shipping();
shipping.setName(request.getParameter("name"));
shippingService.save(shipping);
return "/Shipping/ShippingMethodList";
}
}
@Service
public class ShippingService {
@Autowired
private ShippingMethodRespository shippingMethodRespository;
public ModelAndView saveShippingMethod(HttpServletRequest request, String id) {
shippingMethodRespository.save(shipping);
}
}
服务水平:
最初的回答@Controller
@RequestMapping(value = "/Shipping")
public class ShippingController {
@Autowired
private ShippingService shippingService;
@RequestMapping(value = "/addNewShippingMethod/{id}", method = RequestMethod.POST)
public ModelAndView addshippingMethod(@PathVariable("id") String id, HttpServletRequest request) {
return shippingService.saveShippingMethod(request, id);
}
}
@Service
public class ShippingService {
@Autowired
private ShippingMethodRespository shippingMethodRespository;
public ModelAndView saveShippingMethod(HttpServletRequest request, String id) {
Shipping shipping=new Shipping();
shipping.setName(request.getParameter("name"));
shippingMethodRespository.save(shipping);
ModelAndView shippingMethodsPage = new
ModelAndView("/Shipping/ShippingMethodList");
return shippingMethodsPage;
}
}
我已经描述了两种情况,第一种是:我们将所有数据从控制器保存并返回到页面。
第二种是:使用控制器进行重定向和编写逻辑,并在服务层中保存数据。
您能告诉我哪种方法是最好的编码方式吗?
最初的回答:
这取决于您的应用程序的具体情况。如果您的数据量较小且不需要进行太多处理,则可以直接从控制器保存并返回数据。但是,如果数据量较大或需要执行复杂的操作,则最好使用控制器进行重定向和编写逻辑,并将数据保存在服务层中。这样可以更好地分离关注点,并使您的代码更易于维护。