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

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

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

二、设计模式
方案中用到三种设计模式:
外观模式:
意图---为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用;
优点---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);

}

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

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

/**
 * 生成流程标题
 *
 * @return
 */
String generateProcessTitle();

}

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();
}

}

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

@Autowired
private XXXProcessInternalService xxxProcessInternalService;

@Override
ProcessInternalService getProcessInternalService() {
    return xxxProcessInternalService;
}

@Override
public ProcessTypeEnum handlerType() {
    return ProcessTypeEnum.XXX;
}

}

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

@Autowired
private YYYProcessInternalService yyyProcessInternalService;

@Override
ProcessInternalService getProcessInternalService() {
    return yyyProcessInternalService;
}

@Override
public ProcessTypeEnum handlerType() {
    return ProcessTypeEnum.YYY;
}

}

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

@Override
public void processPreCheck() {

}

@Override
public String generateProcessTitle() {
    return "xxx";
}

}

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

@Override
public void processPreCheck() {

}

@Override
public String generateProcessTitle() {
    return "yyy";
}

}

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

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

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

/**
 * 获取流程详情
 *
 * @param request
 * @return
 */
ProcessDetailResponse detail(ProcessDetailRequest request);

}

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);
}

}

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);
}

}

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

相关文章
|
29天前
|
JSON JavaScript 前端开发
Vue3源码架构简析及Monorepo流程构建
【10月更文挑战第12天】Vue3源码架构简析及Monorepo流程构建
Vue3源码架构简析及Monorepo流程构建
|
1月前
|
Kubernetes 调度 算法框架/工具
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
58 1
NVIDIA Triton系列02-功能与架构简介
|
1月前
|
机器学习/深度学习 存储 搜索推荐
NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
NVIDIA Ampere架构引入了结构化稀疏功能,显著加速了深度学习模型的推理过程。通过2:4的稀疏模式,即每4个相邻权重中有至少2个为0,实现了高效的内存访问和模型推理加速,同时保持了模型精度。腾讯机器学习平台部门利用这一特性,通过渐进式训练方法,实现了模型在搜索引擎中的高效部署与应用,如相关性预测、查询性能预测等场景,不仅提升了处理速度,还在某些情况下超过了原有模型的精度。此外,NVIDIA还提供了TensorRT和cuSPARSELt库,进一步增强了稀疏模型的推理效率。
19 0
 NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
|
19天前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
63 0
|
1月前
|
消息中间件 分布式计算 Kafka
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
39 0
|
2月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
150 9
|
4月前
|
NoSQL Redis UED
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
|
3月前
|
Cloud Native
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
|
3月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
4月前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。