美文网首页
静态代理应用

静态代理应用

作者: 随手点灯 | 来源:发表于2020-03-25 14:55 被阅读0次

    现在调用研发域的三个接口去获取 需求 任务 缺陷

    1. 需求: requirement
    2. 任务: task
    3. 缺陷: defect

    返回的内容都是 WorkItem 有对应的字段

    对应到我们系统里面是

    ChangeOrderItemVO 这里面部分字段是相互映射的

    现在可以获取到的是itemType 和 itemId

    /api/defect/defectById
    /api/requirement/scan
    /api/task/scanTask

    @Autowried
    DefectService defectService;
    
    @Autowried
    RequirementService requirementService;
    
    @Autowried
    TaskService taskService;
    
    List<ChangeOrderItem> changeOrderItems = new ArrayList<>();
    
    for(ChangeOrderItem changeOrderItem : changeOrderItems) {
        
        Long itemId = changeOrderItem.getItemId();
        String itemType = changeOrderItem.getItemType();
        
        // 根据itemType去调用对应的接口,参数是itemId
        WorkItem workItem = null;
        if (itemType == 1) {
            workItem = requirementService.detail(itemId);
        } else if (itemType == 2) {
            workItem = defectService.detail(itemId);
        }else if (itemType == 3) {
            workItem = taskService.detail(itemId);
        }else {
            System.out.print("类型超出范围");
        }
        
        BeanUtils.copyProperties(workItem,changeOrderItem);
        
    }
    
    # 第一种方式,代理模式 静态代理这三个类,这样需要发生变化的时候,不需要修改原有的逻辑,但是需要修改代理类
    
    // 基于接口而非实现编程
    interface IWorkItemService {
        WorkItem getWorkItemByTypeAndId(String itemType,Long itemId)
    }
    
    
    @Service
    class WorkItemService {
    
        @Autowried
        DefectService defectService;
    
        @Autowried
        RequirementService requirementService;
    
        @Autowried
        TaskService taskService;
    
        public WorkItem getWorkItemByTypeAndId(String itemType,Long itemId) {
            WorkItem workItem = null;
            if (itemType == 1) {
                workItem = requirementService.detail(itemId);
            } else if (itemType == 2) {
                workItem = defectService.detail(itemId);
            }else if (itemType == 3) {
                workItem = taskService.detail(itemId);
            }else {
                System.out.print("类型超出范围");
            }
            return workItem;
        }   
    }
    

    相关文章

      网友评论

          本文标题:静态代理应用

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