spring boot rest webservice,如何改进干净的代码?

Posted

技术标签:

【中文标题】spring boot rest webservice,如何改进干净的代码?【英文标题】:spring boot rest webservice, how to improve a clean code? 【发布时间】:2019-03-12 14:17:03 【问题描述】:

我在 Spring Boot 上使用了一个 Web 服务启动了一个项目,当我在我的团队之间共享它时,他们放了一些 cmets:

get方法需要分组例如:get/users & get/users/id will be get/users/id

删除 put 方法,只使用 post Ex: post/users/0 add | post/users/id update

为 Jdbc 模板创建一个帮助类并在存储库类中调用它以集中代码

请大家帮我解决这个问题,我很困惑,谢谢

【问题讨论】:

【参考方案1】:

get 方法需要分组 Ex : get/users & get/users/id 将是 获取/用户/id

我不同意这一点。 /get/users 将返回 List<User>get/users/id 将返回与 id 匹配的 User


删除 put 方法并仅使用 post 示例:post/users/0 add | 发布/用户/id 更新

创建新资源时应使用 Post。 POST 不是幂等的。每次您调用帖子时,都会创建一个新资源。 例如每次调用 POST /Users 都会创建一个新用户。

PUT 在其他手上的工作方式类似于 upsert。如果资源不存在则创建,如果存在则更新/替换。 Put 是幂等的,即使被多次调用也不会改变资源的状态。


为 Jdbc 模板创建一个帮助类并在存储库中调用它 类来集中代码

Helper 类有助于分离关注点并实现单一职责。

然而,JdbcTemplate 是一个随时可用的 JDBC 抽象。我认为创建 Helper 没有任何意义。您可以创建 has-a JdbcTemplate 的 DataAccessObject (DAO) 或存储库。像下图的两道

public class UserDao 
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public User findUserById(String id)

    public void addUser(User user) 


//    -------
public class BooksDao
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<Book> getAllBooksByType(String type)

    public void Book getBookByName(String name) 

现在,您的 Dao 对象可以从 Controller 调用,或者如果您需要在 DB 操作之前/之后修改数据,最好在 Controller 和 Dao 之间有一个 Service 层。

不要太在意建议或规则。坚持基本的 OOPS 概念。这些真的很容易理解和实施。

总是:

    将数据变量和处理这些变量的方法封装在一起

    确保您的班级有单一职责

    编写更小且可测试的方法(如果您无法编写测试来覆盖您的方法,那么您的方法有问题)

    始终将关注点分开

    确保您的对象松散耦合。 (您已经在使用弹簧,所以只需使用弹簧的自动接线)

【讨论】:

感谢您的帮助!!还有一个问题^^!!关于 JdbcTemplate 它被认为是一个帮助类或类似的东西吗? @Djamelkr 正如我在最后一点提到的,我需要了解更多关于您的对象结构以及您是否使用任何 ORM 框架 不,我只是使用 spring 的 jdbcTemplate ,没有 ORM ,只是使用 jdbctemplate 进行简单调用! @Djamelkr 我在最后一点添加了细节。如果您仍有疑问,请查看并告诉我 @AmitPhaltankar 非常清楚,非常感谢 ^^ !!

以上是关于spring boot rest webservice,如何改进干净的代码?的主要内容,如果未能解决你的问题,请参考以下文章

rest-spring-boot-starter

spring-boot实战04:Spring Boot构建RESTful API

列出所有已部署的 REST 端点(spring-boot、tomcat)

初入spring boot(八 )Spring Data REST

Spring Boot测试中使用REST Assured(转)

Spring Boot 2 Rest Api Example