如何在服务层编写业务逻辑
在服务类中创建一个带有参数购物车对象的方法并返回响应实体。
然后调用控制器类的方法。并将自动连接的 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(模型-视图-控制器)是一种软件架构模式,它将应用程序分为三层/部分:模型、视图和控制器。 控制器有助于拥有能够服务多个不同请求的多操作类。 在控制器内(以及其他任何地方),我们尝试使用“单一职责原则”,它应该将业务处理委托给相关的业务类。
记住这一点,我建议您将所有业务逻辑移至单独的服务类,并仅保留控制器中请求和响应的转换。 如果您必须处理标头和查询参数,这一切都将在控制器中完成并传递到服务层,即实际的业务功能。
我还建议您使用 Spring 的 Exception Advice 来处理异常。