企业网站功能模块,创新的微商城网站建设,装修设计平台,wordpress增强编辑器结构性模式-外观模式
门面模式
适用场景#xff1a;如果你需要一个指向复杂子系统的直接接口#xff0c; 且该接口的功能有限#xff0c; 则可以使用外观模式。 不用关心后面的查询具体操作
/*** 聚合查询接口*/
RestController
RequestMapping(/search)
Slf…结构性模式-外观模式
门面模式
适用场景如果你需要一个指向复杂子系统的直接接口 且该接口的功能有限 则可以使用外观模式。 不用关心后面的查询具体操作
/*** 聚合查询接口*/
RestController
RequestMapping(/search)
Slf4j
public class SearchController {Resourceprivate SearchFacade searchFacade;PostMapping(/all)public BaseResponseSearchVo searchAll(RequestBody SearchQueryRequest searchQueryRequest, HttpServletRequest httpServletRequest) {SearchVo searchVo searchFacade.searchAll(searchQueryRequest, httpServletRequest);return ResultUtils.success(searchVo);}
}复杂查询逻辑放在SearchFacade里面
package com.xiaofei.site.search.controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaofei.site.search.common.BaseResponse;
import com.xiaofei.site.search.common.ResultUtils;
import com.xiaofei.site.search.model.dto.image.ImageQueryRequest;
import com.xiaofei.site.search.model.dto.post.PostQueryRequest;
import com.xiaofei.site.search.model.dto.search.SearchQueryRequest;
import com.xiaofei.site.search.model.dto.user.UserQueryRequest;
import com.xiaofei.site.search.model.entity.Image;
import com.xiaofei.site.search.model.enums.SearchTypeEnum;
import com.xiaofei.site.search.model.vo.PostVO;
import com.xiaofei.site.search.model.vo.SearchVo;
import com.xiaofei.site.search.model.vo.UserVO;
import com.xiaofei.site.search.service.ImageService;
import com.xiaofei.site.search.service.PostService;
import com.xiaofei.site.search.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;/*** author tuaofei* description 查询-门面模式* date 2024/11/29*/
Component
Slf4j
public class SearchFacade {Resourceprivate PostService postService;Resourceprivate UserService userService;Resourceprivate ImageService imageService;ResourceThreadPoolTaskExecutor threadPoolTaskExecutor;public SearchVo searchAll(RequestBody SearchQueryRequest searchQueryRequest, HttpServletRequest httpServletRequest) {SearchVo searchVo new SearchVo();if (searchQueryRequest null) {return searchVo;}String searchText searchQueryRequest.getSearchText();String searchType searchQueryRequest.getSearchType();if (StringUtils.isBlank(searchType)) {CompletableFuturePagePostVO postTask CompletableFuture.supplyAsync(() - {PostQueryRequest postQueryRequest new PostQueryRequest();postQueryRequest.setSearchText(searchText);PagePostVO postVOPage postService.listPostVoPage(postQueryRequest, httpServletRequest);return postVOPage;}, threadPoolTaskExecutor);CompletableFuturePageUserVO userTask CompletableFuture.supplyAsync(() - {UserQueryRequest userQueryRequest new UserQueryRequest();userQueryRequest.setUserName(searchText);PageUserVO userVOPage userService.listUserVoPage(userQueryRequest);return userVOPage;}, threadPoolTaskExecutor);CompletableFuturePageImage imageTask CompletableFuture.supplyAsync(() - {ImageQueryRequest imageQueryRequest new ImageQueryRequest();imageQueryRequest.setSearchText(searchText);PageImage imagePage imageService.getImageByPage(imageQueryRequest);return imagePage;}, threadPoolTaskExecutor);CompletableFuture.allOf(postTask, userTask, imageTask);try {PagePostVO postVOPage postTask.get();searchVo.setPostList(postVOPage.getRecords());PageUserVO userVOPage userTask.get();searchVo.setUserList(userVOPage.getRecords());PageImage imagePage imageTask.get();searchVo.setImageList(imagePage.getRecords());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}} else {SearchTypeEnum searchTypeEnum SearchTypeEnum.getEnumByValue(searchType);switch (searchTypeEnum) {case POST:PostQueryRequest postQueryRequest new PostQueryRequest();postQueryRequest.setSearchText(searchText);PagePostVO postVOPage postService.listPostVoPage(postQueryRequest, httpServletRequest);searchVo.setPostList(postVOPage.getRecords());break;case USER:UserQueryRequest userQueryRequest new UserQueryRequest();userQueryRequest.setUserName(searchText);PageUserVO userVOPage userService.listUserVoPage(userQueryRequest);searchVo.setUserList(userVOPage.getRecords());break;case IMAGE:ImageQueryRequest imageQueryRequest new ImageQueryRequest();imageQueryRequest.setSearchText(searchText);PageImage imagePage imageService.getImageByPage(imageQueryRequest);searchVo.setImageList(imagePage.getRecords());break;default:break;}}return searchVo;}
}