Site icon 小匚的个人博客

黑马程序员2023JavaWeb项目Day09 用户端代码差异点

查询历史订单

1 XML 里的 大于号 和 小于号,需要替换成

如果是 直接用 >= 和 <= ,在小于等于这里的结果是,不报错,但是前端测试的时候,不能在网页端正确筛选出 某个日期之前的订单。

2 查历史订单的时候,在 service 层区分了 for user 和 for admin;

并且,接参的时候,直接用三个同名的参数去接了,我做了一个封装:

在 order service 的实现类里:

我的是通用的:

查询订单详情:

答案选择用字符串直接存一个 order 对象,我选择了 新建了一个 OrderHistoryVO, 辛辛苦苦地 copy 了一堆 order 的变量。

我的方式就显得很,,臃肿。啊,没有想到一个 对象,可以直接用 string 的。哦,这可能正是 Serializable 的作用所在!

取消订单

答案的 controller 多了 throws exception ,这让我想到自己在 service 实现层是不是漏掉了什么。哦,还有一个点,是在 order service 这里,又一次区分了 admin 和 user 端,这里是 用户的 取消订单。

果然,这里我只考虑到了状态,没有考虑到其他的异常情况:

1 订单存在检查;

2 订单状态检查;

3 订单是否需要退款;

4 最后才是我所写的,还有一个 cancelReason呢。

这些都是我欠缺的。这一块,会按照答案更新一下。

回看答案的过程,发现自己总是想当然的去 implement 代码,而不是 梳理出下面的业务规则,难怪会漏那么多判断。

业务规则:

再来一单

同样,有业务规则理解的不一致:

人这是只添加到 购物车,没有添加到 订单呢!

/

看看我的,直接整个 copy 了新的订单了。我就是商家杀手吧:

在一个细节上,我注意到了老师又偷偷用了我不熟悉的知识:

我是老老实实遍历 copyProperties+setXX 的

(poe assistant 说):

第一段代码(将订单详情对象转换为购物车对象)的特性:

  1. 使用了Java 8 的Stream API 和 Lambda 表达式,提供了一种简洁、函数式的方式处理集合数据。
  2. 通过 BeanUtils.copyProperties 方法,可以方便地将一个对象的属性复制到另一个对象中。
  3. 使用 collect(Collectors.toList()) 将转换后的购物车对象收集到一个列表中。

第二段代码(复制订单明细)的特性:

  1. 使用传统的 for 循环遍历集合,逐个处理每个元素。
  2. 通过 BeanUtils.copyProperties方法,将一个对象的属性复制到另一个对象中。
  3. 创建一个新的订单明细对象,并对其进行修改和设置属性。
  4. 将新的订单明细对象添加到列表中。

这里涉及到了两个我不太熟的,但是一看又很眼熟的知识点,Java 8 的新特性,想上上上个月的面试还 cue 过。好,决定出两个视频讲讲。

商家端的功能代码,另开一篇 blog。

Exit mobile version