专栏名称: 阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均将呈现于此
目录
相关文章推荐
51好读  ›  专栏  ›  阿里云开发者

一文讲透程序编排的核心方式:从表达式语言到并行化实践

阿里云开发者  · 公众号  · 科技公司  · 2025-05-28 18:00

正文

请到「今天看啥」查看全文


类编排

在项目开发当中,经常会出现某个类的属性或几个属性是另外一个类的查询条件,无论是数据库查询还是rpc调用,需要显式手动拼接,并且由于使用范围不同,只会取某些类,随着项目的迭代,这往往会导致代码中混乱调用,以及业务中有众多相似代码,但如果统一在一起加载,例如使用聚合根的思想,又会造成某些不需要的类加载,造成读放发大。 本节介绍 model-view-builder 框架,来解决上述问题。

model-view-builder

github地址: https://github.com/PhantomThief/model-view-builder ,这是一个能力非常强大的框架,其使用函数式编程定义加载动作,树状结构关联加载类,懒加载延时构建。

函数式编排

SimpleModelBuilder builder = new SimpleModelBuilder()                .self(TaskInfo.classTaskInfo::getTaskId)                .on(TaskInfo.class).id(TaskInfo::getTaskId).to(Decision.class)                .on(TaskInfo.class).id(TaskInfo::getTaskId).to(Disposal.class)                .on(TaskInfo.class).id(TaskInfo::getTaskId).to(RiskControl.class)                .on(TaskInfo.class).id(TaskInfo::getPoiId).to(DeepInfo.class)                .on(TaskInfo.class).id(TaskInfo::getPoiId).to(PoiInfo.class)                .build(Decision.class, decisionDao::getDecisionMap)                .build(Disposal.class, disposalDao::getDisposalMap)                .build(RiskControl.class, riskControlDao::getRiskControlMap)                .build(DeepInfo.class, deepInfoDao::getDeepInfoMap)                .build(PoiInfo.class, poiInfoDao::getPoiInfoMap);

树状结构关联

懒加载构建

builder = new SimpleModelBuilder()        .self(A.class, A::getId)        .lazyBuild(A.class,                        (BuildContext context, Collection ids)                                -> BService.get(ids),                        B.class)//只有在调用获取的B的时候,才会执行BService.get取值逻辑buildContext.get(B.class)

其中lazyBuild是懒加载,只有在读取的时候会调用;重复获取数据的时候也不会重复调用,可以避免读放大。

该框架使用多层Map维护类与函数, 以及类与类之间的映射关系,使其具有编排、聚合的能力 ,这些能力天然就适合领域划分,通过领域划分确定边界作为上下文信息,在方法中传递使用,提高代码可读性的同时,也 为研发人员提供高效获取数据的体验。

业务示例描述:有这么一个需求,先查询帖子,再查询评论,最后查询是否是粉丝。

构建modelBuilder

构建与读取结果

框架缺点同样也很明显:

  • 学习成本高, 需要熟悉函数式编程,才能熟练驾驭;

  • 接口限制,接口返回限定Map,需要接口改造和兼容(也可以改造框架适应);

  • 隐式调用,可读性不好;

在考虑引入该框架的时候,需要考虑以上缺点在团队中是否成问题,如果没问题,可放心使用,你大概率会成为它的重度用户。

流程编排







请到「今天看啥」查看全文