当前位置: 首页 > news >正文

招聘美容师在哪个网站做招聘最有效广州市网站建设怎么样

招聘美容师在哪个网站做招聘最有效,广州市网站建设怎么样,市住建局官方网,展示型网站举例牢记于心 职责单一: 责任链模式可以将每个验证逻辑封装到一个独立的处理器中#xff0c;每个处理器负责单一的验证职责#xff0c;符合单一职责原则。 可扩展性: 增加新的验证逻辑时#xff0c;只需添加新的处理器#xff0c;而不需要修改现有的代码。 清晰的流程: 将所…牢记于心 职责单一: 责任链模式可以将每个验证逻辑封装到一个独立的处理器中每个处理器负责单一的验证职责符合单一职责原则。 可扩展性: 增加新的验证逻辑时只需添加新的处理器而不需要修改现有的代码。 清晰的流程: 将所有验证逻辑组织在一起使得代码结构更加清晰易于理解。 使用场景 现在有个逻辑判断商家端创建优惠券的时候需要给出一些指定信息后台会对这些信息进行判断比如优惠券名称是否合法是否为空时间是否正确失效时间先于启用时间绑定的商品是否存在....等等逻辑判断。 我们不可能说每加一个判断标准就去核心代码里面改动不便于维护.... 这里采用责任链设计模式将逻辑判断分为两块即两个独立的处理器 判断必要条件是否为空、判断指定商品是否存在微服务中往往需要给商品服务发http请求。 步骤 1、编写责任链接口 public interface MerchantAdminAbstractChainHandlerT extends Ordered {/*** 执行责任链逻辑** param requestParam 责任链执行入参*/void handler(T requestParam);/*** return 责任链组件标识*/String mark(); } 细节通过继承Ordered抽象类让处理器有顺序的执行先执行性能花费小的再执行性能花费大的调用第三方API。  2、编写责任链处理器实现类 相同的责任链下的不同处理器他们的mark方法的返回值要一样后期根据这个做map的key将同一个责任链进行绑定value为一个list集合 Component public class CouponTemplateCreateParamNotNullChainFilter implements MerchantAdminAbstractChainHandlerCouponTemplateSaveReqDTO {Overridepublic void handler(CouponTemplateSaveReqDTO requestParam) {if (StrUtil.isEmpty(requestParam.getName())) {throw new ClientException(优惠券名称不能为空);}if (ObjectUtil.isEmpty(requestParam.getSource())) {throw new ClientException(优惠券来源不能为空);}if (ObjectUtil.isEmpty(requestParam.getTarget())) {throw new ClientException(优惠对象不能为空);}if (ObjectUtil.isEmpty(requestParam.getType())) {throw new ClientException(优惠类型不能为空);}if (ObjectUtil.isEmpty(requestParam.getValidStartTime())) {throw new ClientException(有效期开始时间不能为空);}if (ObjectUtil.isEmpty(requestParam.getValidEndTime())) {throw new ClientException(有效期结束时间不能为空);}if (ObjectUtil.isEmpty(requestParam.getStock())) {throw new ClientException(库存不能为空);}if (StrUtil.isEmpty(requestParam.getReceiveRule())) {throw new ClientException(领取规则不能为空);}if (StrUtil.isEmpty(requestParam.getConsumeRule())) {throw new ClientException(消耗规则不能为空);}}Overridepublic String mark() {return MERCHANT_ADMIN_CREATE_COUPON_TEMPLATE_KEY.name();}Overridepublic int getOrder() {return 0;} } 负责调用第三方服务查看指定商品是否存在第三方服务往往开设一个接口给外部调用 Component public class CouponTemplateCreateParamVerifyChainFilter implements MerchantAdminAbstractChainHandlerCouponTemplateSaveReqDTO {Overridepublic void handler(CouponTemplateSaveReqDTO requestParam) {if (ObjectUtil.equal(requestParam.getTarget(), DiscountTargetEnum.PRODUCT_SPECIFIC)) {// 调用商品中台验证商品是否存在如果不存在抛出异常// ......}}Overridepublic String mark() {return MERCHANT_ADMIN_CREATE_COUPON_TEMPLATE_KEY.name();}Overridepublic int getOrder() {return 20;} } 3、责任链处理器上下文 Component public final class MerchantAdminChainContextT implements ApplicationContextAware, CommandLineRunner {/*** 应用上下文我们这里通过 Spring IOC 获取 Bean 实例*/private ApplicationContext applicationContext;/*** 保存商家后管责任链实现类*/private final MapString, ListMerchantAdminAbstractChainHandler abstractChainHandlerContainer new HashMap();public void handler(String mark, T requestParam) {// 根据 mark 标识从责任链容器中获取一组责任链实现 Bean 集合ListMerchantAdminAbstractChainHandler abstractChainHandlers abstractChainHandlerContainer.get(mark);if (CollectionUtils.isEmpty(abstractChainHandlers)) {throw new RuntimeException(String.format([%s] Chain of Responsibility ID is undefined., mark));}abstractChainHandlers.forEach(each - each.handler(requestParam));}Overridepublic void run(String... args) throws Exception {// 从 Spring IOC 容器中获取指定接口 Spring Bean 集合MapString, MerchantAdminAbstractChainHandler chainFilterMap applicationContext.getBeansOfType(MerchantAdminAbstractChainHandler.class);chainFilterMap.forEach((beanName, bean) - {// 判断 Mark 是否已经存在抽象责任链容器中如果已经存在直接向集合新增如果不存在创建 Mark 和对应的集合ListMerchantAdminAbstractChainHandler abstractChainHandlers abstractChainHandlerContainer.getOrDefault(bean.mark(), new ArrayList());abstractChainHandlers.add(bean);abstractChainHandlerContainer.put(bean.mark(), abstractChainHandlers);});abstractChainHandlerContainer.forEach((mark, unsortedChainHandlers) - {// 对每个 Mark 对应的责任链实现类集合进行排序优先级小的在前unsortedChainHandlers.sort(Comparator.comparing(Ordered::getOrder));});}Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext applicationContext;} } 细节通过ApplicationAware接口和CommandLineRunner接口进行时期分离保证Bean对象初始化后先进行初始化applicationContext对象等SpringBoot服务完全跑起来后再去调用重写的run方法此时applicationContext对象已经完成了初始化 4、实现类中的使用 Service RequiredArgsConstructor public class CouponTemplateServiceImpl extends ServiceImplCouponTemplateMapper, CouponTemplateDO implements CouponTemplateService {private final MerchantAdminChainContext merchantAdminChainContext;Overridepublic void createCouponTemplate(CouponTemplateSaveReqDTO requestParam) {// 通过责任链验证请求参数是否正确merchantAdminChainContext.handler(MERCHANT_ADMIN_CREATE_COUPON_TEMPLATE_KEY.name(), requestParam);} } 通过 Spring IOC 容器去获取责任链处理器的所以不管新增和删除都不需要变更获取逻辑。新增的话创建对应处理器即可符合开闭原则。 我们直接通过上下文去判断是否符合逻辑不符合的直接抛错不再继续...
http://www.zqtcl.cn/news/941264/

相关文章:

  • 备案的网站名与公司名称出国用哪个地图app好
  • 网站建设工作室图片文章资讯类网站
  • 深圳自助建站系统网站题目有哪些
  • 郑州做网站kuihuakeji软文发布的平台与板块
  • 一那个网站可以做一建题安全文化企业示范企业评价标准
  • 网站没有关键词收录phpstudy配置网站
  • 返利网站怎么做的做网站推广见客户的话术
  • 两个人看的视频在线观看成都网站seo厂家
  • 做汽车配件出口用什么网站好些微信朋友圈营销技巧
  • 怎样建设传奇网站空间什么做电子书下载网站
  • 自己怎么做dj 视频网站网站模板制作教程视频
  • 苏州瑞熙网站建设签名图片在线制作
  • 重庆建站模板大全给公司创建网站
  • king cms网站建设上海传媒公司有哪些
  • 优时代网站建设网站建设哪家公司最好
  • 做网站有多难平面设计学徒要学多久
  • 包装网站模板做西式快餐店网站
  • 泉州制作网站软件九歌人工智能诗歌写作网站
  • wordpress安装时失败网站后台seo设置
  • 顺企网吉安网站建设网站设计师岗位职责
  • 佛山市品牌网站建设价格网站设计模板免费
  • 澧县网站建设常用的oa系统办公软件
  • 江门网站推广哪里专业网站显示百度地图
  • 上海微网站网站的营销推广方案及预算
  • 灌南住房建设局网站南京网站开发南京乐识好
  • 万网网站建设步骤公司建设网站能提升什么竞争力
  • 门户网站 页面集成防内涵吧网站源码
  • 二手房发布网站怎么做有哪个网站有免费视频素材
  • 张浦专业做网站纯html5网站
  • qq互联 网站开发北京博洛尼装饰公司