问题描述
如何在服务层写业务逻辑
解决方法
在服务类中创建一个带有参数cart对象的方法并返回响应实体。
然后从控制器类调用该方法。并将自动连接的 loginRepository 移动到服务类中。
public ResponseEntity method(Cart cart){
try {
String username = cart.getUserName();
String password = cart.getPassword();
String email = cart.getEmail();
String productname = cart.getProductName();
String price = cart.getPrice();
String discription = cart.getDiscription();
if (!(loginRepository.existsByUserNameAndPassword(username,password) && productname != null)) {
return new ResponseEntity<ApiError>(HttpStatus.NOT_FOUND);
}
if (!productRepository.existsByProductNameAndPriceAndDiscription(productname,price,discription)) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
Integer count = cartRepository.countByUserName(cart.getUserName());
System.out.println(count);
cartRepository.save(new Cart(cart.getUserName(),cart.getPassword(),cart.getEmail(),cart.getProductName(),cart.getPrice(),cart.getDiscription(),count));
return new ResponseEntity<>(new MessageResponse("product Successfully added to cart"));
}
catch (Exception | ApiError e) {
return new ResponseEntity<ApiError>(HttpStatus.BAD_REQUEST);
}
}
在控制器中自动装配服务类并从控制器调用上述方法,如下所示。
service.method(cart);
,
这是一个很难回答的问题,有多种最佳实践可用于重构或重构代码。 MVC 和 DAO 等设计模式很有帮助。
Spring 建立在流行的 MVC 设计模式之上。 MVC(Model-View-Controller)是一种软件架构模式,它将应用程序分为三个区域:模型、视图和控制器。 控制器有助于拥有能够为多个不同请求提供服务的多动作类。 在控制器内部,我们尝试使用“单一职责原则”,它应该将业务处理委托给相关的业务类。
记住这一点,我建议您将整个业务逻辑移到一个单独的服务类中,并仅保留控制器中请求和响应的转换。 以防将来您必须处理所有将在控制器中完成并传递到服务层以实现实际业务功能的标头和查询参数。
我还建议您使用 Spring 的 Exception Advice 来处理异常。