controller与service的界限?

来源:13-9 增加会员注册功能

慕神4535282

2020-10-13

老师,下午好,请教一个问题,就是controller与service的界限在哪?
比如,我看到,本节中 controller会有如下setter()代码

@PostMapping("/register")
public ResponseDto register(@RequestBody MemberDto memberDto) {
  // 校验
  ...
  
  memberDto.setPassword(DigestUtils.md5DigestAsHex(memberDto.getPassword().getBytes()));

  ...
  memberService.save(memberDto);
}

同时,service层也有如下的setter()代码

private void insert(Member member) {
  Date now = new Date();
  member.setId(UuidUtil.getShortUuid());
  member.setRegisterTime(now);
  memberMapper.insert(member);
}

所以,很多时候,我都不知道这些 成员变量的 setter()方法应该是写在 controller层还是 service层,就比如说:上述controller层的这一句:

memberDto.setPassword(DigestUtils.md5DigestAsHex(memberDto.getPassword().getBytes()));

放到service层的insert()方法中,写成

private void insert(Member member) {
    member.setPassword(DigestUtils.md5DigestAsHex(member.getPassword().getBytes()));
}

也可以呀,为什么要一些setter()放到controller层,另一些放到 service层呢?这之中的界限在哪呢?
谢谢老师!

写回答

1回答

甲蛙

2020-10-14

什么时候放在controller,什么时候放在service,没有绝对的,主要还是一些经验积累加个人判断,password是比较敏感的字段,所以我选择在接口入口就把它加密一次。这样后台所有的代码,都是按二次加密的结果来的走逻辑。如果你放到service,假设service有十个方法都用到了password这个字段,那是10个方法都setter加密?还是3个方法加密,7个方法不加密?会不会有多个方法内部调用,出现重复3次加密,4次加密?这就很难维护了。

一般controller做一些必要的参数赋值,校验。主要逻辑在service实现

0
1
慕工程7058922
谢谢老师!
2024-07-09
共1条回复

Spring Cloud+ Vue前后端分离开发企业级在线视频系统

全网稀缺课程 市场热门项目+主流框架 一课掌握前后端技术

1743 学习 · 1698 问题

查看课程