【通用行业开发部】流程功能架构设计实现方案

简介: 众所周知,流程功能如果前期设计不理想,对于后期的维护以及拓展极其不友好,那真可谓是望“码”兴叹,谈“码”色变,集万千情感于一身,怎一句“问候”了得。

一、目的
这篇文章的主要目的就是为了优化甚至是解决类似功能的架构设计难题,让后续维护以及拓展工作省时省力,一看就会,即时上手,再也不用担心自己的头发了。

二、设计模式
方案中用到三种设计模式:
外观模式:
意图---为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用;
优点---1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点---不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

策略模式:
意图---定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
优点---1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺陷---1、策略类会增多。 2、所有策略类都需要对外暴露。

桥接模式:
意图---将抽象部分与实现部分分离,使它们都可以独立的变化。
优点---1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺陷---桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

了解更多设计模式:https://www.runoob.com/design-pattern/design-pattern-tutorial.html

三、关键衔接知识点
Spring高级注入:
目的:一次性注入接口的所有实现类,不需要关心具体实现类,实现类之间互不影响,删除或者新增实现变得简单,需要变动的代码极少。

更多Spring高级注入的知识各自深入,此处不再赘述!

四、设计图
5034FEC4-600A-4ddc-B91E-9888C1BA564A.png

五、不废话,直接上代码

1、创建策略接口【策略模式】
public interface ProcessHandlerService {

/**
 * 流程类型
 *
 * @return
 */
ProcessTypeEnum handlerType();

/**
 * 发起流程
 *
 * @param request
 */
void startProcess(StartProcessRequest request);

/**
 * 流程审批
 *
 * @param request
 */
void approvalProcess(ApprovalProcessRequest request);

/**
 * 获取流程详情
 *
 * @param request
 * @return
 */
ProcessDetailResponse detail(ProcessDetailRequest request);
AI 代码解读

}

2、创建桥接能力接口【桥接模式】
public interface ProcessInternalService {

/**
 * 流程预校验
 */
void processPreCheck();

/**
 * 生成流程标题
 *
 * @return
 */
String generateProcessTitle();
AI 代码解读

}

3、创建一个公共的实现策略【策略模式】
abstract class AbstractProcessHandlerService implements ProcessHandlerService {

/**
 * 获取桥接接口能力对象
 *
 * @return
 */
abstract ProcessInternalService getProcessInternalService();

@Override
public void startProcess(StartProcessRequest request) {

}

@Override
public void approvalProcess(ApprovalProcessRequest request) {

}

@Override
public ProcessDetailResponse detail(ProcessDetailRequest request) {

    return new ProcessDetailResponse();
}
AI 代码解读

}

4、创建具体的策略实现xxx【策略模式】
@Service
public class XXXProcessHandlerService extends AbstractProcessHandlerService {

@Autowired
private XXXProcessInternalService xxxProcessInternalService;

@Override
ProcessInternalService getProcessInternalService() {
    return xxxProcessInternalService;
}

@Override
public ProcessTypeEnum handlerType() {
    return ProcessTypeEnum.XXX;
}
AI 代码解读

}

5、创建具体的策略实现yyy【策略模式】
@Service
public class YYYProcessHandlerService extends AbstractProcessHandlerService {

@Autowired
private YYYProcessInternalService yyyProcessInternalService;

@Override
ProcessInternalService getProcessInternalService() {
    return yyyProcessInternalService;
}

@Override
public ProcessTypeEnum handlerType() {
    return ProcessTypeEnum.YYY;
}
AI 代码解读

}

6、创建具体的桥接能力接口实现xxx【桥接模式】
@Service
public class XXXProcessInternalService implements ProcessInternalService {

@Override
public void processPreCheck() {

}

@Override
public String generateProcessTitle() {
    return "xxx";
}
AI 代码解读

}

7、创建具体的桥接能力接口实现yyy【桥接模式】
@Service
public class YYYProcessInternalService implements ProcessInternalService {

@Override
public void processPreCheck() {

}

@Override
public String generateProcessTitle() {
    return "yyy";
}
AI 代码解读

}

8、创建流程外观能力接口【外观模式】
public interface ProcessFacadeService {

/**
 * 发起流程
 *
 * @param request
 */
void startProcess(StartProcessRequest request);

/**
 * 审批流程
 *
 * @param request
 */
void approvalProcess(ApprovalProcessRequest request);

/**
 * 获取流程详情
 *
 * @param request
 * @return
 */
ProcessDetailResponse detail(ProcessDetailRequest request);
AI 代码解读

}

9、流程外观能力接口实现【外观模式、spring高级注入】
@Service
public class ProcessFacadeServiceImpl implements ProcessFacadeService {

private static Map<ProcessTypeEnum, ProcessHandlerService> handlerServices;

// 【spring构造器高级注入】
@Autowired
public ProcessFacadeServiceImpl(List<ProcessHandlerService> handlers) {
    handlerServices = handlers.stream().collect(
            Collectors.toMap(ProcessHandlerService::handlerType,
                    processHandlerService -> processHandlerService));
}

@Override
public void startProcess(StartProcessRequest request) {
    handlerServices.get(request.getProcessType()).startProcess(request);
}

@Override
public void approvalProcess(ApprovalProcessRequest request) {
    handlerServices.get(request.getProcessType()).approvalProcess(request);
}

@Override
public ProcessDetailResponse detail(ProcessDetailRequest request) {
    return handlerServices.get(request.getProcessType()).detail(request);
}
AI 代码解读

}

10、创建web层接口
@RestController
@RequestMapping("/process")
public class ProcessController {

@Autowired
private ProcessFacadeService processFacadeService;

/**
 * 流程发起
 *
 * @param request
 * @return
 */
@PostMapping("/start")
public Boolean startProcess(@RequestBody StartProcessRequest request) {
    processFacadeService.startProcess(request);
    return Boolean.TRUE;
}

/**
 * 流程审批
 *
 * @param request
 * @return
 */
@PostMapping("/approval")
public Boolean approvalProcess(@RequestBody ApprovalProcessRequest request) {
    processFacadeService.approvalProcess(request);
    return Boolean.TRUE;
}

/**
 * 获取流程详情
 *
 * @param request
 * @return
 */
@PostMapping("/detail")
public ProcessDetailResponse detail(@RequestBody ProcessDetailRequest request) {
    return processFacadeService.detail(request);
}
AI 代码解读

}

六、总结
小弟在此抛砖引玉,还请各位大佬伸出大腿让我抱一抱!

相关文章
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
Vue3源码架构简析及Monorepo流程构建
【10月更文挑战第12天】Vue3源码架构简析及Monorepo流程构建
Vue3源码架构简析及Monorepo流程构建
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
54 1
|
21天前
|
CPU的定义与功能与架构
CPU(中央处理器)是计算机的核心部件,负责执行程序指令、控制数据传输和进行运算。它能处理算术与逻辑运算,并协调其他硬件协同工作。x86架构源于英特尔,适用于PC和服务器,采用复杂指令集;ARM架构则由Acorn等公司开发,广泛用于移动设备和嵌入式系统,采用精简指令集,功耗低且能效比高。
70 5
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
115 12
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
207 1
NVIDIA Triton系列02-功能与架构简介
政务部门人工智能OCR智能化升级:3大技术架构与4项核心功能解析
本项目针对政务服务数字化需求,建设智能文档处理平台,利用OCR、信息抽取和深度学习技术,实现文件自动解析、分类、比对与审核,提升效率与准确性。平台强调本地部署,确保数据安全,解决低质量扫描件、复杂表格等痛点,降低人工成本与错误率,助力智慧政务发展。
NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
NVIDIA Ampere架构引入了结构化稀疏功能,显著加速了深度学习模型的推理过程。通过2:4的稀疏模式,即每4个相邻权重中有至少2个为0,实现了高效的内存访问和模型推理加速,同时保持了模型精度。腾讯机器学习平台部门利用这一特性,通过渐进式训练方法,实现了模型在搜索引擎中的高效部署与应用,如相关性预测、查询性能预测等场景,不仅提升了处理速度,还在某些情况下超过了原有模型的精度。此外,NVIDIA还提供了TensorRT和cuSPARSELt库,进一步增强了稀疏模型的推理效率。
85 0
 NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
211 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等