gpt4 book ai didi

java - 如何避免if-else树代码?

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:35 25 4
gpt4 key购买 nike

我有一个休息 Controller ,其中包含一种根据“标题”和“作者”参数查找书籍的方法。

你能告诉我如何摆脱 if-else 结构吗?现在并不复杂,但将来参数的数量可能会增加,这将导致一团糟。

    @GetMapping
public ResponseEntity<List<Book>> searchBooksByTitleAndAuthor(
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "author", required = false) String author) {

if (title == null && author == null) {
log.info("Empty request");
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} else if (title != null && author == null) {
log.info("Retrieving books by title");
List<Book> books = bookService.getBooksByTitle(title);
if (books.isEmpty()) {
log.info("No books with this title");
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<>(books, HttpStatus.OK);
} else if (author != null && title == null) {
List<Book> books = bookService.getBooksByTitle(title);
if (books.isEmpty()) {
log.info("No books with this title");
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<>(books, HttpStatus.OK);
} else {
List<Book> books = bookService.getBooksByTitleAndAuthor(title, author);
if (books.isEmpty()) {
log.info("No books with matching this title and author");
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<>(books, HttpStatus.OK);
}

}

最佳答案

由于您的计划是最终支持更多参数,因此最好的选择可能是查看 Hibernate's Criteria class .这允许您动态构造查询。它不会避免 if 语句,但它避免else 语句并使支持新参数变得非常容易。在您的存储库/DAO 级别:

Criteria criteria = session.createCriteria(Book.class);
if (author != null && !author.isEmpty()) {
criteria.add(Restriction.eq("author", author));
}
if (title != null && !title.isEmpty()) {
criteria.add(Restriction.eq("title", title));
}
criteria.addOrder(Order.asc("publishDate"));
return (List<Book>) criteria.list();

这有一些显着的好处:

  1. 要支持新参数,您只需将参数添加到 Controller ,然后将参数向下传递到存储库,并将参数添加到此 block 。

  2. 您最终可以使您的排序可配置,例如:

    ?sort=title:asc&author=Bobby%20Tables

但是,也有一些缺点,最明显的是它依赖于字符串值来引用您的属性。如果您的属性名称更改(请注意这是 POJO 属性,而不是数据库列名称),那么此代码将需要更改。然而,我认为这是一种非常罕见的情况,除非在最新的新项目中,数据库模式仍在不断变化,并且在数据库模式建立之后,这种缺点很少会导致问题。

另一个提示,一旦你输入了一定数量的参数(例如 4-5),创建 a parameter object将您的参数包装到一个可以传递的漂亮对象中。

关于java - 如何避免if-else树代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50064574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com