美文网首页
7.springCloud 目前存在的问题

7.springCloud 目前存在的问题

作者: 呆叔么么 | 来源:发表于2020-04-28 14:12 被阅读0次

一.存在的问题

1.代码耦合非常高

order服务

@RestController
@RequestMapping("/order")
@Slf4j
public class OrderController {
...
    @Autowired
    private ProductClient productClient;

    @GetMapping("/contact/{goodsId}")
    public ServerResponse contact(@PathVariable("goodsId") Long goodsId) {
        GoodsInfo goodsInfo = productClient.search(goodsId);
        return ServerResponse.createBySuccess(goodsInfo);
    }
...
}

product服务

@RestController
@RequestMapping("/product")
@Slf4j
public class ProductController {
...
    @GetMapping("/search/{goodsId}")
    public GoodsInfo search(@PathVariable("goodsId") Long goodsId){
        GoodsInfo goodsInfo = goodsInfoService.findByGoodsId(goodsId);
        if(goodsInfo == null){
            throw new ProductException(ExceptionCodeEnum.PRODUCT_NOT_EXIT);
        }
        return goodsInfo;
    }
....
}

他们都有一个共同的实体类GoodsInfo ,而 GoodsInfo属于商品服务的。

2.可维护性差

product的访问接口,都定义在order服务中,可维护性非常的差

/**
 * @Author:LovingLiu
 * @Description: FeignClient客户端
 * @Date:Created in 2019-11-28
 */
@FeignClient(name = "PRODUCT")
@RequestMapping("/product")
public interface ProductClient {
    @GetMapping("/search/{goodsId}")
    GoodsInfo search(@PathVariable("goodsId") Long goodsId);
}

2.项目改进

1.模块化改造

image.png
1.1 client

存放的是对外暴露的接口

@FeignClient(name = "product", path = "/product")
public interface ProductClient {
    @PostMapping("/getByIdList")
    List<GoodsInfoOutPut> ListByGoodsIdList(@RequestBody  List<Long> goodsInfoIdList);

    @PostMapping("/decreaseStock")
    Integer decreaseStock (@RequestBody List<DecreaseStockInput> decreaseStockInputList);
}

1.2 common

存放对外使用的公共类
DecreaseStockInput 减库存时由order服务传入

@Data
public class DecreaseStockInput {
    private Long goodsId;
    private Integer goodsStock;
}

GoodsInfoOutPut 商品product传出

@Data
public class GoodsInfoOutPut {

    /**
     * 关联商品id
     *
     * @mbg.generated
     */
    private Long goodsId;

    /**
     * 下单时商品的名称(订单快照)
     *
     * @mbg.generated
     */
    private String goodsName;

    /**
     * 下单时商品的主图(订单快照)
     *
     * @mbg.generated
     */
    private String goodsCoverImg;

    /**
     * 下单时商品的价格(订单快照)
     *
     * @mbg.generated
     */
    private Integer sellingPrice;


    /**
     * 商品描述
     *
     * @mbg.generated
     */
    private String goodsIntro;
}

1.2 server

存放的是该服务的业务逻辑 controller service dao
如:controller

@RestController
@RequestMapping("/product")
@Slf4j
public class ProductController {
    @Autowired
    private GoodsInfoService goodsInfoService;
    @Autowired
    private GoodsCategoryService goodsCategoryService;

    @GetMapping("/list")
    public ServerResponse<CommonPage<GoodsInfo>> list(
            @RequestParam(value = "pageNum",defaultValue = "1")
                    Integer pageNum,

            @RequestParam(value = "pageSize",defaultValue = "10")
                    Integer pageSize,

            @RequestParam(value = "orderBy",defaultValue = "create_time")
                    String orderBy,

            @RequestParam(value = "orderType",defaultValue = "desc")
                    String orderType,

            @RequestParam(value = "search",required = false)
                    String keyword){
        List<GoodsInfo> goodsInfoList = goodsInfoService.listByUser(pageNum,pageSize,orderBy,orderType,keyword);
        return ServerResponse.createBySuccess(CommonPage.restPage(goodsInfoList));
    }

    @GetMapping("/category")
    public ServerResponse<List<GoodsCategoryVO>> category(){
        List<GoodsInfo> goodsInfoList = goodsInfoService.listByGoodsSellStatus(CommonCodeEnum.PRODUCT_STATUS_ON_SELL.getCode());
        List<Long> categoryIdList = goodsInfoList.stream().map(e -> e.getGoodsCategoryId()).collect(Collectors.toList());

        List<GoodsCategory> goodsCategoryList = goodsCategoryService.findInIdListAndDeletedStatus(categoryIdList,CommonCodeEnum.PRODUCT_CATEGORY_NO_DELETED.getCode());

        List<GoodsCategoryVO> goodsCategoryVOList = Lists.newArrayList();

        for (GoodsCategory goodsCategory: goodsCategoryList) {
            Long categoryId = goodsCategory.getCategoryId();
            List<GoodsInfo> categoryGoodsInfoList = new ArrayList<>();
            for(GoodsInfo goodsInfo : goodsInfoList){
                if(categoryId == goodsInfo.getGoodsCategoryId()){
                    categoryGoodsInfoList.add(goodsInfo);
                }
            }
            GoodsCategoryVO goodsCategoryVO = new GoodsCategoryVO();
            BeanUtils.copyProperties(goodsCategory, goodsCategoryVO);
            goodsCategoryVO.setGoodsInfoList(categoryGoodsInfoList);

            goodsCategoryVOList.add(goodsCategoryVO);
        }

        return ServerResponse.createBySuccess(goodsCategoryVOList);
    }

    @GetMapping("/search/{goodsId}")
    public GoodsInfo search(@PathVariable("goodsId") Long goodsId){
        GoodsInfo goodsInfo = goodsInfoService.findByGoodsId(goodsId);
        if(goodsInfo == null){
            throw new ProductException(ExceptionCodeEnum.PRODUCT_NOT_EXIT);
        }
        return goodsInfo;
    }

    @PostMapping("/getByIdList")
    public List<GoodsInfoOutPut> ListByGoodsIdList(@RequestBody  List<Long> goodsInfoIdList) {
        List<GoodsInfo> goodsInfoList = goodsInfoService.ListByGoodsIdList(goodsInfoIdList);
        List<GoodsInfoOutPut>  goodsInfoOutPutList = goodsInfoList.stream().map(e -> {
            GoodsInfoOutPut goodsInfoOutPut = new GoodsInfoOutPut();
            goodsInfoOutPut.setGoodsId(e.getGoodsId());
            goodsInfoOutPut.setGoodsName(e.getGoodsName());
            goodsInfoOutPut.setGoodsCoverImg(e.getGoodsCoverImg());
            goodsInfoOutPut.setGoodsIntro(e.getGoodsIntro());
            goodsInfoOutPut.setSellingPrice(e.getSellingPrice());
            return goodsInfoOutPut;
        }).collect(Collectors.toList());

        return goodsInfoOutPutList;
    }
    @PostMapping("/decreaseStock")
    public Integer decreaseStock (@RequestBody List<DecreaseStockInput> decreaseStockInputList) {
        return goodsInfoService.decreaseStock(decreaseStockInputList);
    }
}

相关文章

  • 7.springCloud 目前存在的问题

    一.存在的问题 1.代码耦合非常高 order服务 product服务 他们都有一个共同的实体类GoodsInfo...

  • 目前存在的问题

    (一) 我时常会回想起在今年三月份的自己,我认为那是我目前经历之中,成长最快的一个阶段,甚至比大学阶段的学习进步的...

  • 目前存在的问题

    1、接受的信息太多太乱,没有秩序感 2、心太乱,不稳 3、精力管理有问题 4、理顺学习方向和内容,做一个计划。按计...

  • 目前存在的问题

    1.情绪管理。其实最近的表现都还不错,但是我觉得自己昨天下午的最后一通电话做得很差。来电者因为男朋友对自己的条件不...

  • 目前尚且存在的问题

    1.清单的东西很难养成习惯: 初期解决方法: 就是playtask 关于奖励的玩意儿,另外一个就是立马可以兑现的大...

  • 目前上课存在的问题

    1.热身和复习的时间过多,导致新学的内容练习不够,认读不够,书写不够,特别是中高级班CM4.FS1.FS5, 解决...

  • 目前存在或者可能存在的问题

    明天考试,今天晚上简单总结一下。 语文分数从来都是玄学,我只可以保证作文分数和默写不出问题,然而能不能及格看客观题...

  • 游戏音乐目前存在的问题

    网络游戏作为一个新兴的网络文化产业,带动了网络小说、音乐制作、美术设计、计算机技术等相关产业,其产值和经济效益是非...

  • 目前家庭教育存在的问题

    家庭是社会的细胞,家庭教育是家庭的重要事务,父母是孩子的第一任老师。从历史上看,家庭教育曾经是人类教育最主要的形态...

  • 目前的语文教材存在的问题

    教材问题一直是语文教育中社会各方关注的问题,也是备受争议与诟病的问题,原因在于教材是目前体制化教育的入口,根据内容...

网友评论

      本文标题:7.springCloud 目前存在的问题

      本文链接:https://www.haomeiwen.com/subject/ecqiwctx.html