说明: 这里涉及到VO层,先仔细看看VO层是怎样构成的。。。
这里重点只讲关于秒杀活动。。。商品详情这些源码也能看得八九不离十。
项目预览
活动还未开始,此刻还不能下单。。。
如果秒杀时间已过,也不会显示秒杀信息!
总结:这里使用Ajax是最好的选择,ajax最擅长于局部信息的刷新,不会刷新整个页面,给服务器造成压力。。。
秒杀活动
分析秒杀模型
由上图可知,数据库的存储样式是完全按照DO层进行一一对应存储的,我们在service层进行逻辑判断的时候,需要设计Mapper层即通过DO去向数据库查询数据,这里可能会涉及多张表的数据操作,所以我们干脆就把多张表里所需数据抽象出来重新建个DO层,便于后续Service进行逻辑处理,而这个抽象出来的DO层正是我们的Model,是由多个DO聚合而成,为何叫他是抽象呢?因为这个DO(我们的Model啦,比如ItemModel) 并没有像下面的PromoDO和ItemDO一样有对应的数据表进行一一对应,(相当与我们面向对象所学的小狗汪汪叫与小猫喵喵叫各自的特点抽离出形成一个动物类的叫声?),于是Model层之间也要互相影响,比如ItemModel里的商品id在PromoModel与秒杀商品id对应的话,表示此商品就是个秒杀商品,我们会在ItemModel的基础上与PromoModel的秒杀信息聚合在一起,组成ItemVO,其中包含了商品的秒杀价格(来自PromoModel)以及库存商品名等(来自ItemModel)。。。
商品详情Cotroller层
关于将Model层转为VO层呈现给用户,用到了Stream.map().collect()流式处理:
stream().map().collect()_-星雨-的博客-CSDN博客
下单后,生成订单
订单Controller层
说明:
订单创建Service层
这里重点讲一下订单流水号的生成:
大众点评订单系统分库分表实践 - 美团技术团队
看看数据库: