应用架构COLA3.0:让事情回归简单

拆解COLA框架 COLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”。由阿里大佬张建飞所提出的一种基于DDD和代码整洁理论所诞生的实践理论框架,详细内容可阅读《程序员的底层思维》和相关git代码去了解。 阅读详情
AI摘要

在阿里云将COLA纳入Java应用架构选项之际,作者回顾并优化了COLA框架,摒弃了不必要的复杂性,遵循奥卡姆剃刀原理,简化了设计,提升了可读性和维护性。

最近,阿里云的同学告诉我,COLA作为应用架构,已经被选入阿里云的Java应用初始化的应用架构选项之一。
image.png
This is really something,于是,在这个里程碑节点上,我开始回过头来,重新审视COLA一路走来的得与失。

COLA作为一种架构思想无疑是成功的。但是作为框架,个人感觉有点鸡肋之嫌。 特别是在简洁性上做的不好,感觉做了不少画蛇添足的事情。

试想一下,有些功能我作为作者都很少去使用,我实在想不到,它为什么还有存在的理由。

基于上面的思考,我做了这一次COLA 2.0 到 COLA 3.0的升级。在本次升级中,我没有增加任何新的功能,而是尽量多删减了一些概念和功能。让COLA可以更加纯粹的focus在应用架构上,而不是框架支持和架构约束上。

支持我做这些决策的背后原因只有一个——奥卡姆剃刀原理。

奥卡姆剃刀原理

奥卡姆剃刀原理,是指如无必要,勿增实体(Entities should not be multiplied unnecessarily),即“简单有效原理”。正如奥卡姆在《箴言书注》2卷15题说“切勿浪费较多东西去做,用较少的东西,同样可以做好的事情。”

image.png

在具体的应用过程中,我们可以遵循以下原则去做事情:
“如果同一个现象有n种理论,最简单的那个便是最正确的。能用n做好事情,那就不要有第n+1个动作。”

比如,《皇帝的新衣》的皇帝到底穿没穿衣服呢?如果你在现场,你很有可能就是大臣之一。

image.png

如果懂得了奥卡姆剃刀原理,可以用逻辑手段,判断谁是真理。

第一种逻辑如下:假设皇帝是真的穿了衣服→假设愚蠢的人看不见→假设你就是愚蠢的人→所以你没看见皇帝穿衣服。

第二种逻辑如下:假设皇帝没穿衣服→所以你没看见皇帝穿衣服。

同样看见光身子的皇帝,第二种解释简单明了。而第一种解释,可能正因为它是错误的,就需要更多假设来补救漏洞,就像说谎圆谎一样。

真相不需要伪装掩饰,简单明了。

再比如,地心说和日心说,托勒密的地心说模型是一个本轮均轮模型。人们可以按照这个模型,定量计算行星的运动,据此推测行星所在的位置。

到了中世纪后期随着观察仪器的不断改进,人们能够更加精确地测量出行星的位置和运动,观测到行星实际位置与这个模型的计算结果存在偏差,一开始还能勉强应付,后来小本轮增加到八十多个,却仍然不能精确地计算出行星的准确位置。

image.png

1543年,波兰天文学家哥白尼在临终时发表了一部具有历史意义的著作—《天体运行论》。这个理论体系提出了一个明确的观点:太阳是宇宙的中心,一切行星都在围绕太阳旋转。该理论认为,地球也是行星之一,它一方面像陀螺一样自转,一方面又和其他行星一样围绕太阳转动。
image.png

哥白尼的计算不仅结构严谨,而且计算简单,与已经加到八十余个圈的地心说相比,哥白尼的计算与实际观测资料能更好地吻合。因此,地心说最终被日心说所取代。

设计中的弯弯绕

深入考察一下,我们系统中,类似于“地心说”这样的弯弯绕的设计,实在是不在少数。

从系统架构的角度看,有些弯弯绕是因为系统边界划分不合理,导致职责不清,依赖混乱。

从应用架构的角度看,有些弯弯绕是因为过度设计,为了追求所谓的灵活性和可扩展性,使用了不恰当的设计。导致本来可以直观呈现的代码逻辑,被各种包装,各种隐藏,各种转发… 无形中极大的阻碍了代码的可读性和可理解性,增加了维护成本。

举个例子,我看过无数的业务系统,喜欢拿业务流程编排说事情。因此,在业务系统中,可以看到各种五花八门的“弯弯绕设计”。

比如,在一个业务系统中,我看到了如下的pipeline设计。这个设计的本质是说把一个复杂的业务操作进行结构化拆解为多个小的处理单元。

image.png

拆解是正确的,但是这种处理方式显然不够“奥卡姆”(关于更多结构化分解的内容,可以看我的另一篇文章)。作为维护人员,进入“入口函数”后,还要去查数据库,然后才能知道哪些组件被调用了,太绕了,不够直观,也不简洁。

同样的逻辑,按照下面的方式写不香吗?

public class CreateCSPUExecutor {
    @Resource
    private InitContextStep initContextStep;

    @Resource
    private CheckRequiredParamStep checkRequiredParamStep;

    @Resource
    private CheckUnitStep checkUnitStep;

    @Resource
    private CheckExpiringDateStep checkExpiringDateStep;

    @Resource
    private CheckBarCodeStep checkBarCodeStep;

    @Resource
    private CheckBarCodeImgStep checkBarCodeImgStep;

    @Resource
    private CheckBrandCategoryStep checkBrandCategoryStep;

    @Resource
    private CheckProductDetailStep checkProductDetailStep;

    @Resource
    private CheckSpecImgStep checkSpecImgStep;

    @Resource
    private CreateCSPUStep createCSPUStep;

    @Resource
    private CreateCSPULogStep createCSPULogStep;

    @Resource
    private SendCSPUCreatedEventStep sendCSPUCreatedEventStep;


    public Long create(MyCspuSaveParam myCspuSaveParam){
        SaveCSPUContext context = initContextStep.initContext(myCspuSaveParam);

        checkRequiredParamStep.check(context);

        checkUnitStep.check(context);

        checkExpiringDateStep.check(context);

        checkBarCodeStep.check(context);

        checkBarCodeImgStep.check(context);

        checkBrandCategoryStep.check(context);

        checkProductDetailStep.check(context);

        checkSpecImgStep.check(context);

        createCSPUStep.create(context);

        createCSPULogStep.log(context);

        sendCSPUCreatedEventStep.sendEvent(context);

        return context.getCspu().getId();
    }
}

这种写法简单直观,易维护,与前一种方式相比,具有同样的组件复用性。符合奥卡姆剃刀的精神,相比较而言,前面那种弯弯绕设计,虽然看起来有点设计感,带来了一点点OCP的好处。但是无端增加了理解和认知成本,孰优孰劣,不难分辨。

COLA 3.0 升级

做了这么长的铺垫,终于到了批斗COLA中“弯弯绕设计”的时候了。

去掉Command

在COLA的初始阶段,因为受到CQRS的影响,于是想到了使用命令模式来处理用户请求。设计的初衷是想通过框架,一方面强制约束Command和Query的处理方式,另一方面把Service里面的逻辑,强制拆分到CommandExecutor中去,防止Service膨胀过快。

和上面介绍过的pipeline设计类似,这种设计有点绕,不够直观,如下所示:

public class MetricsServiceImpl implements MetricsServiceI{

    @Autowired
    private CommandBusI commandBus;

    @Override
    public Response addATAMetric(ATAMetricAddCmd cmd) {
        return commandBus.send(cmd);
    }

    @Override
    public Response addSharingMetric(SharingMetricAddCmd cmd) {
        return commandBus.send(cmd);
    }

    @Override
    public Response addPatentMetric(PatentMetricAddCmd cmd) {
        return  commandBus.send(cmd);
    }

    @Override
    public Response addPaperMetric(PaperMetricAddCmd cmd) {
        return  commandBus.send(cmd);
    }
}

看起来还挺干净的,可是ATAMetricAddCmd到底是被哪个Executor处理的呢,不直观。我还要去理解CommandBus,以及CommandBus是如何注册Executor的。无形中增加了认知成本,不好。

既然这样,为何不用奥卡姆剃刀把这个CommandBus剔除呢。如下所示,去除CommandBus之后,代码是不是直观了很多,唯一的损失是我们会失去框架层面提供的Interceptor功能,然而,Interceptor正是我下一个要动刀的地方。

public class MetricsServiceImpl implements MetricsServiceI{

    @Resource
    private ATAMetricAddCmdExe ataMetricAddCmdExe;
    @Resource
    private SharingMetricAddCmdExe sharingMetricAddCmdExe;
    @Resource
    private PatentMetricAddCmdExe patentMetricAddCmdExe;
    @Resource
    private PaperMetricAddCmdExe paperMetricAddCmdExe;

    @Override
    public Response addATAMetric(ATAMetricAddCmd cmd) {
        return ataMetricAddCmdExe.execute(cmd);
    }

    @Override
    public Response addSharingMetric(SharingMetricAddCmd cmd) {
        return sharingMetricAddCmdExe.execute(cmd);
    }

    @Override
    public Response addPatentMetric(PatentMetricAddCmd cmd) {
        return  patentMetricAddCmdExe.execute(cmd);
    }

    @Override
    public Response addPaperMetric(PaperMetricAddCmd cmd) {
        return  paperMetricAddCmdExe.execute(cmd);
    }
}

去掉Interceptor

当时设计Interceptor,是因为有CommandBus作为基础,为了更好的利用命令模式带来的好处,便添加了Interceptor功能。其本质是一个AOP处理。

鉴于Spring的AOP功能已经很完善了,这个设计也是有点鸡肋。事实证明,大家在使用COLA框架的时候,很少会使用Interceptor,包括我自己也是一样。既然如此,剔除也罢。

去掉Convertor、Validator、Assembler

关于命名的重要性,这里就不赘述了。当时想着是否能从框架层面,规范一下一些常用功能的命名。但是在实际使用中,发现这个想法也是有些过于理想化了。

我记得,在团队实践COLA的初期,还经常为什么是Convertor(转换器),什么是Assembler(组装器)的事情,争论不休。

后面我仔细想了想,命名虽然很重要,但其作用域最多也就是一个团队规范,你校验器是叫Validator还是Checker并没有什么本质区别,团队自己定义就好了。尝试从框架层面去解决团队约定问题,其效果不会太好,因此也果断挥刀剔除。

类扫描优化

业务身份和扩展点的思想,是TMF的核心理念,也是阿里业务中台的进行多业务支持的核心方法论。

COLA致力于提供一种轻量级的扩展实现方式,因此该功能得以在奥卡姆的屠刀下得以保存。因为COLA的扩展点设计是借鉴了中台的TMF,因此在前面的设计中,其类扫描方案是直接照搬TMF的做法。

实际上,TMF的类扫描方案对COLA来说有点多余。因为COLA本身就是架设在Spring的基础之上,而Spring又是建立在类扫描的基础之上。因此,我们完全可以复用Spring的类扫描,没必要自己写一套。

在原生的Spring中,至少有3种方式可以获取到用户自定义Annotation的Bean,最简洁的是通过ListableBeanFactory.getBeansWithAnnotation方法,或者使用ClassPathScanningCandidateComponentProvider进行扫包。

在这次改版中,我选用的是getBeansWithAnnotation方法,主要是为了获取@Extension的Bean,用来实现扩展点功能,废弃了原来的TMF类扫描实现。

总结

触发这次升级的动机,主要是因为,自己在实践COLA的过程中,的确发现有些华而不实的功能。在COLA作为阿里云的基础应用架构,其影响力越来越大的时候,我有责任给到大家一个正确的引导——去伪存真,简洁有效,而不是引入更多的复杂度。

实际上,COLA是有两部分组成的:

一方面COLA是一种架构思想,是整合了洋葱圈架构、适配器架构、DDD、整洁架构、TMF等架构思想的一种应用架构。

在这里插入图片描述

在这次升级中,架构思想部分基本没有变化,唯一一点是因为去除了Command概念,因此CQRS也成了可选项,而不再是一种强要求。

另一方面COLA也是框架组件,通过这次升级,我使用奥卡姆剃刀砍掉了绝大部分的组件能力,仅仅保留了扩展点功能。其用意是不希望COLA作为框架给到应用开发者太多的约束,这不符合简单有效的风格。

所以,总结下来,与其说这是一次升级,不如说它是功能“降级”,是在做减法。

但我相信,减法可以让COLA更加符合奥卡姆精神,帮助COLA轻装上阵,走的更远。

COLA开源地址:https://github.com/alibaba/COLA

架构演进COLA3.0:以简驭繁的设计哲学 本文深入解析COLA 3.0架构演进的减法哲学,探讨其如何通过简化CommandBus、整合Spring生态等关键改造,实现从复杂到优雅的蜕变。结合电商、金融等实战案例,揭示精简架构提升40%代码效率的奥秘,为开发者提供分层设计黄金法则与扩展点实践指南。 阅读详情

相关推荐

从阿里云Java初始化选项说起:COLA 3.0的‘断舍离’与架构师的奥卡姆剃刀实践

本文探讨了COLA 3.0架构在Java应用开发中的革新实践,通过奥卡姆剃刀原则精简设计,提升开发效率与代码可读性。COLA 3.0摒弃冗余抽象,回归直观方法调用,显著降低认知成本与项目启动时间,为应用架构设计提供了新范式。

weixin_28742653的博客 193

COLA之架构演变(一)

一、常用架构 1、分层架构 2、CQRS架构 3、六边形架构 4、洋葱圈架构 二、COLA介绍 COLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”。目前COLA已经发展到COLA4.0 COLA分为两个部分,COLA架构和COLA组件。 三、COLA演变 1、COLA1.0 2、COLA2.0 2.0作了一个对于cola来说非常核心的改动,就是采用DIP的设计理念,这

shine0312的专栏 5728

智能零售柜商品检测实战:5000张图、三种标签格式与YOLO11训练

目标检测模型的落地效果,很大程度取决于训练数据与标签质量。智能零售柜中的商品识别,因密集排列、遮挡和反光,更需要针对性的数据集与训练流程。VOC、COCO、YOLO三种标注格式对应不同训练框架,本质是坐标系与存储结构的差异。掌握格式互转与坐标校验,是避免模型静默学错的第一步。基于5000张柜内商品图与配套脚本,YOLO11提供了GPU、CPU、Mac三平台的一键训练方案,通过合理设置batch、imgsz、amp等参数,可有效提升密集小目标的检测精度。从标签校验到现场视频盲测,一套避坑清单能大幅缩短模型上线

weixin_34268310的博客 662

阿里巴巴 COLA 应用架构实践

COLA 架构是一个整洁的,面向对象的,分层的,可扩展的应用架构,可以帮助降低复杂应用场景的系统熵值,提升系统开发和运维效率。不管是传统的分层架构、六边形架构、还是洋葱架构,都提倡以业务为核心,解耦外部依赖,分离业务复杂度和技术复杂度等,COLA 架构在此基础上融合了 CQRS、DDD、SOLID 等设计思想,形成一套可落地的应用架构。

梦想歌的技术博客 3914

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

CODESYS EtherCAT通讯断了怎么办?手把手教你用ST语言写状态监测程序(附完整代码)

本文详细解析了CODESYS平台下EtherCAT通讯中断的故障排查与恢复方法,通过ST语言编写状态监测程序实现链路监测、故障隔离和伺服恢复。文章包含完整代码示例,帮助工程师快速诊断EtherCAT网络问题,提升工业自动化设备的运行稳定性。

weixin_30919571的博客 209

奥卡姆剃刀:让事情回归简单

最近,阿里云的同学告诉我,COLA作为应用架构,已经被选入阿里云的Java应用初始化的应用架构选项之一。This is really something,于是,在这个里程碑节点上,我开始回...

我的新书《代码精进之路:从码农到工匠》 2367

汇川AM系列ethercat控制伺服的使用说明(含转矩模式)

本文以一个实际例子,介绍ethercat伺服驱动器的工作原理,以及在汇川AM系列PLC中,如何点动、定位、速度、转矩控制ethercat伺服。

qq_34047402的博客 5112

PaddleNLP 数据集贡献实战:从零编写一个合格的 DatasetBuilder

本篇指南以 PaddleNLP 开源仓库中的官方文档《创建 DatasetBuilder》([docs/zh/community/contribute_datasets/how_to_write_a_DatasetBuilder.rst](https://link.gitcode.com/i/1b5e7cb108a9ec5ee3f8c91f3366e638))为骨架,系统讲解如何通过继承 `pad

gitblog_00887的博客 411

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2166

盘点 | 2019年度抢读书单,10项热门技能抢先Get

来源 | 异步 每到年末,就很容易陷入焦虑的状态。一方面是年底的事情会比较多,另一方面,自己一年的忙碌似乎没有达到预期,年初立的flag清单,能打勾的并不多。 但新的一年即将来临,依旧要调整状态,对自己设定新的目标——无论对2019年的自己是否满意,新一年里,我们依然未来可期。 为此,异步君给大家精心挑选了10本精品好书,都是当下热门的技能。您还可以在图书正式...

人邮异步社区 1111

嵌入式STM32F407CET6移植OpenHarmony系统方法

文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。

嵌入式技术开发 546

Redwood 教程:深入理解 Layouts 布局与 `<Set wrap>` 路由包装机制

本文是 Redwood 框架教程"Chapter 1"中的核心章节,围绕 **Layouts(布局)** 展开:当多个页面需要共享 `<header>`、导航栏等公共内容时,如何用布局组件把"页面自身关心的事情"和"页面外层的事情"彻底分离。你将学会用 `yarn redwood g layout` 生成布局、通过 `<Set wrap={Layout}>` 在路由层统一包裹页面,并结合 [pac

gitblog_00793的博客 829

Plecs standalone 4.9.5最新版本,赶紧来下载使用吧,需要做并网逆变器及光伏储能变换器的朋友赶紧下载起来

PLECS 4.9.5较4.7.1版实现全面升级:采用自适应求解器切换技术,支持多核CPU/GPU加速,仿真速度提升30-50%;新增模型引用功能,实现模块化设计;强化光伏/风电等新能源组件,支持多物理场耦合分析;优化代码生成功能,兼容多种硬件平台和FMU导入。新版特别适用于复杂电力电子系统、多域联合仿真及硬件在环测试项目,但对硬件配置要求更高。基础教学项目仍可使用4.7.1版本。建议用户根据项目复杂度选择升级方案。

2436

基于OpenCV实现暗通道先验去雾算法及改进,效果惊人

深度技术文,前方高能

公号:一条coding 2万+

如何保证同事的代码不会腐烂?一文带你了解 Alibaba COLA 架构

本文开始前,问大家一个问题,你觉得一份业务代码,尤其是互联网业务代码,都有哪些特点? 我能想到的有这几点: 互联网业务迭代快,工期紧,导致代码结构混乱,几乎没有代码注释和文档。 互联网人员变动频繁,很容易接手别人的老项目,新人根本没时间吃透代码结构,紧迫的工期又只能让屎山越堆越大。 多人一起开发,每个人的编码习惯不同,工具类代码各用个的,业务命名也经常冲突,影响效率。 大部分团队几乎没有时间做代码重构,任由代码腐烂。 每当我们新启动一个代码仓库,都是信心满满,结构整洁。但是时间越往后,代码就变得腐败不.

蛮三刀酱 3653

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

alibaba/COLA 4.0框架 DDD使用记录

简介:开发团队之前没用过ddl开发。第一次用COLA框架试着做项目,记录一些遇到的问题

xyc1211的博客 8952

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【架构设计】阿里开源架构Cola4.0的项目实践:订单系统

【架构设计】使用SpringBoot+MybaitsPlus+阿里开源架构Cola4.0重构订单功能

秋装什么的博客 6757

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

探索高效协作框架COLA:阿里巴巴的低代码开发新星

COLA(Component-based Low-code Application)是阿里巴巴开源的一款基于组件化的低代码应用开发框架。它旨在简化企业级业务应用的开发流程,让开发者能够通过图形化界面快速构建复杂的应用系统,提高开发效率和协同能力。 ## 技术分析 ### 基于Vue.js的组件化设计 COLA采用了流行的前端框架Vue.js作为基础,充分利用了其强大的组件化特性。开发者可以将...

gitblog_00031的博客 1329

【亲测免费】 Alibaba's COLA: 清洁的面向对象与分层架构实践

阿里巴巴的COLA项目,全称Clean Object-oriented & Layered Architecture,旨在提供一个整洁的、面向对象的分层架构解决方案。这个开源项目采用Java作为主要编程语言,专为治理复杂业务应用系统的结构设计而生,帮助开发者构建低熵值、高内聚的应用。 ## 核心功能 COLA的核心功能集中在两大部分:架构框架与通用组件集。 - **架构框架** 提供了一套最佳实...

gitblog_09258的博客 1123

阿里巴巴COLA框架

/ 扩展点接口:订单校验扩展/*** 校验订单合法性* @param order 订单领域对象* @return 是否合法*/

s1213_24548的博客 1800

从核心到边界:六边形、洋葱与COLA架构的深度解析

在COLA架构中,我们制定了一系列的命名规范,以便通过名称就能知晓该类的作用和职责范围,从而极大地提升代码的可理解性,提升代码审查(Code Review)的效率。因此,在COLA的设计中,汲取了很多前文中介绍的典型应用架构的优秀思想。只有一个业务的简单场景对扩展性的要求并不突出,这也是扩展设计常被忽略的原因,因为我们大部分的系统都是从单一业务开始的。洋葱架构提供了一个完全独立的对象模型(领域模型),该模型位于架构的核心,不依赖其他任何层次,我们可以在不影响内层的情况下改变外层的灵活性。

贾欣晓的博客 3309

COLA 3.0 升级后,我为什么不再推荐新手用它做Java应用框架?聊聊架构与框架的边界

本文探讨了COLA 3.0升级后从Java应用框架转变为架构规范的转变,分析了其减法设计理念对新手开发者的挑战。文章对比了架构与框架的本质区别,并提供了现代Java生态中的替代方案及正确使用COLA 3.0的实践建议,帮助开发者理解其适用场景。

weixin_27102543的博客 142

COLA 4.0:应用架构的最佳实践

COLA 4.0:应用架构的最佳实践~

crg18438610577的博客 2200

cola4.0 扩展点使用及源码浅析

最近新项目里面用了cola框架,里面有一个扩展点,特定去撸了一下它的源码,把它整明白了 Cola扩展点使用 Cola中提供了一种扩展点的机制,允许我们通过bizId(组织ID)、useCase(使用案例)、scenario(业务场景)三者动态的去选择实现类。有点类似与我们的策略模式,在程序运行的过程中,动态的选择实现类去处理我们的请求。 我就不多做解释了,下面的例子看了,就能明白这个扩展点怎么用了。 1、定义扩展点接口,实现ExtensionPointI public interface Organiz.

weixin_44335140的博客 8623
上一篇: 人人都是架构师:架构是一种能力,不是头衔!
下一篇: 奥卡姆剃刀:让事情回归简单
张建飞(Frank)
博客等级 码龄20年 6846粉丝 148原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值