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

时间:2018-10-07 22:01:20

标签: spring rest web-services spring-mvc spring-boot

我使用其余的Web服务在春季启动时启动了一个项目,当我在团队之间共享时,他们发表了一些评论:

  • 获取方法需要分组 Ex: get/users & get/users/{id} will be get/users/{id}

  • 删除 put 方法并仅使用 post Ex: post/users/0 add | post/users/{id} update

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

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

1 个答案:

答案 0 :(得分:3)

  

get方法需要分组,例如:get / users和get / users / {id}将是   获取/用户/ {id}

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


  

删除put方法并仅使用post ex: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){} 
}

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

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

总是:

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

  2. 确保您的课程具有单一职责

  3. 编写较小且可测试的方法(如果您无法编写测试来覆盖您的方法,则您的方法有问题)

  4. 始终将关注点分开

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