请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

controller与service的界限?

回答1 浏览98 2020-10-13 14:03:25

老师,下午好,请教一个问题,就是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层呢?这之中的界限在哪呢?
谢谢老师!

添加回答

已采纳回答

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

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

2020-10-14 09:36:30

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

难度初级
时长27小时
人数855
好评度99.8%

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

讲师

十二年Java研发和带团队经验,目前在知名第三方支付公司担任项目经理,负责公司核心支付项目的研发管理工作及技术培训工作,多年的支付相关工作造就了严谨的代码开发风格。专注于Java全栈技术研究和分享,独立完成过多个项目,熟悉项目开发的生命周期,从框架搭建到部署上线。讲课风格以实战为基础,不说废话,只讲干货。

意见反馈 帮助中心 APP下载
官方微信