# DataAggregate **Repository Path**: Cigar123/DataAggregate ## Basic Information - **Project Name**: DataAggregate - **Description**: 关于实际项目中代码复用问题的一种解决方案 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-03-10 - **Last Updated**: 2021-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DataAggregate #### 介绍 这是关于实际项目中代码复用问题的一种解决方案:将执行器作为复用载体,为其提供入参的自动创建与出参的自动回写,使其与调用方解耦,聚焦于实现业务逻辑-即根据入参生成出参(面对数据编程),而调用方无需修改/增加任何代码。 整体流程(数据流向):1.通过注解将聚合对象中指定属性绑定到执行器 2.执行器执行业务逻辑后生成返回值 3.返回值自动(或通过注解)回写至聚合对象 Ps1: ​ 聚合对象-数据来源(当前特指接口返回对象) ​ 执行器-承载复用代码的类,类属性包含复用方法所需的入参与出参 #### 特性 1. 提供对各种场景支持(当前以AOP手段针对于Resp增强) 2. **注解复用代码**的方式 3. 执行器-聚焦于实现业务逻辑 1. 执行器与聚合对象形式上**完全隔离**且**行为独立** 1. 返回值名称与类型无关的待处理值绑定(当名称不一致时需手动指定) 2. 每个执行器可被多个聚合对象以不同形式(多对一,一对多)绑定 2. 支持Spring容器对象的注入 3. 线程安全 4. 细粒度控制,随时启停 4. 聚合对象 1. 参数名称与类型无关的待处理值绑定(当名称不一致时需手动指定) 2. 每个属性(指包装类型下的每个属性)支持**多个执行器运行且互不干扰** 3. 为每个执行器提供多样的行为控制(是否单例,属性是否必要) 5. 绑定和映射 1. 下述情形的**自动判断与绑定** 1. 属性跨对象绑定(平级) Ex:ClassA.parm1.p2 -> B.p1 2. 属性跨容器绑定(多层List) Ex:A.List p1.p2 -> B.p1或B.List P1.p2 3. 既跨对象又跨容器 Ex:List.p1.List p2 -> B.p1 2. 下述情形的**自动判断与回写** 1. 双方参数名一致时自动反写对应值(平级或上级) 2. 提供自定义字段映射,根据绑定关系判断映射关系准确回写值期望属性的正确值 #### 使用说明 ​ 当前提供在spring框架下,以AOP形式进行@AfterReturning拦截(方法执行后)的使用场景。 1. ![输入图片说明](https://images.gitee.com/uploads/images/2021/0427/142610_ecadbaa3_2192535.png "clipboard.png") 2. ![输入图片说明](https://images.gitee.com/uploads/images/2021/0427/143029_7bb2c76b_2192535.png "clipboard.png") 3. ![输入图片说明](https://images.gitee.com/uploads/images/2021/0427/143117_5d9dafeb_2192535.png "image-20210319104326567.png") #### 后续功能 1. 提供在配置文件中定义入参绑定与出参回写规则的功能。ps:当前在Resp中使用注解的形式是一种侵入式的做法,胜在直观,便捷,减少出错概率 2. 多种使用场景,如方法执行前拦截、Feign、Mybatis使用前后拦截、手动调用等等。 3. 性能优化: 1. 分离类解析与执行过程,类解析可以在项目启动时进行 2. 使用字节码编译时动态生成Get/Set代替反射调用 3. 关键节点多线程 4. **代码重构**(当前代码为快速实现基本功能存在大量不规范) 1. 按照功能进行模块与类划分 2. 符合设计原则并按当前标记处使用代理等模式 Ps2:用作技术分享的PDF 见根目录《技术分享-数据聚合》