新增和更新的两个问题

新增和更新的两个问题

老师好,有两个问题请问下

  1. 更新为什么不用id去查对应的商品,而是用商品名称去查?并且在用商品名称查询后还是需要是验证同名而id不同的校验。

  2. 新增时是在service里面做的 BeanUtils.copyProperties(),更新又是在controller里面做的BeanUtils.copyProperties(),为什么要这么做?这两个不是同一个性质的东西吗?出于什么考虑这么做呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-07-12 17:05:59

同学你好~

问题一:在业务逻辑中,是不允许有同名商品的。而商品名是由前台传递过来的,那么此时:

1.如果根据商品名没有查询到任何商品对象,那么此商品名一定与数据库其他商品信息不重名;

2.如果根据商品名查询到了对应的对象,那么此时就存在重名的可能性。此时就需要去判断,这里到底是“重名”还是“同一个商品”,这里就需要根据id再处理一次。

此处如果直接根据id去查询,那么确实能够保证在修改商品信息,不过就无法保证商品名不重复了。

问题二:这里使用BeanUtils类的copyProperties是为了简化属性的赋值过程。这里UpdateProductReq中的字段和Product中的字段并不是完全一样的,那么属性间的赋值就需要大量的调用UpdateProductReq中的get方法和Product中的set方法。为了简化这个过程,直接使用了工具方法copyProperties。

祝学习愉快~

  • 提问者 5942 #1

    老师,不好意思,我的第二个问题是为什么一个在service中做copyProperties的操作,一个在controller中做copyProperties的操作?这两个有什么区别

    2022-07-12 20:19:22
  • 好帮手慕小蓝 回复 提问者 5942 #2

    同学你好,这里在项目效果上是没有本质区别的,由于课程中的项目主要是讲授知识点的应用,在业务逻辑上并不是十分严谨。

    此处规范的做法是统一将copyProperties的操作放在Service中,而不是在Controller中。


    在实际项目中,如果严格按照Controller-Service-Dao的结构书写代码时,Controller的作用仅应当为以下三点:

    1.接收请求参数;

    2.传递数据,调用Service方法;

    3.返回视图数据。

    由于Controller只是传递数据,而不应当处理数据,所有数据的处理,包括对数据的封装或者再封装,都应当在对应的Service中进行。

    所以课程中如果严格按照开发规范处理,应当都在Service中进行处理。


    但是实际开发时,确实有很多情况下数据也会在Controller中进行处理,例如Service的接口制定时参数类型与Controller中获取的数据类型不一致,但是Service已经开发完成时。此时就会违背上面的原则,在Controller中对数据进行加工处理。


    综上,建议尽量遵守规则,除非没有其他解决方案,不要在Controller中进行数据的处理。

    祝学习愉快~

    2022-07-13 09:54:08
  • 提问者 5942 回复 好帮手慕小蓝 #3

    好的,谢谢老师,明白了~

    2022-07-13 11:51:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师