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回答
-
什么时候放在controller,什么时候放在service,没有绝对的,主要还是一些经验积累加个人判断,password是比较敏感的字段,所以我选择在接口入口就把它加密一次。这样后台所有的代码,都是按二次加密的结果来的走逻辑。如果你放到service,假设service有十个方法都用到了password这个字段,那是10个方法都setter加密?还是3个方法加密,7个方法不加密?会不会有多个方法内部调用,出现重复3次加密,4次加密?这就很难维护了。
一般controller做一些必要的参数赋值,校验。主要逻辑在service实现
012024-07-09
相似问题