1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huoyo-disroute

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Disroute

易用的状态分发处理工具

Disroute是一个Java项目的状态分发处理工具,能根据对象、json或者map里面的某个属性值分别执行不同的方法,通过方法解耦的方式,避免大量的if else判断,同时支持java se项目和spring项目

适用场景

  • ✅ 大量if else的逻辑
  • ✅ 消息通道里根据不同的状态值进行不同逻辑的处理,比如websocket或者其他
  • ✅ 多态机制下根据不同的对象类型调用不同的方法
  • ✅ 对话系统中根据不同的意图调用不同的服务
  • ✅ 适配器模式或者策略模式场景
  • ✅ 物联网场景下,遥测、遥信、遥控、遥调上行信号根据分流等

使用教程

假设要改写:

public String process(ParamData param){
    String result = null;
    if(param.getState()==1){
        ...
        result = xxx;
    }else if(param.getState()==2){
        ...
        result = xxx;
    }else{
        ...
        result = xxx;
    }
    return Rresult;
}

详细使用教程请访问Disroute教程

1、引入maven依赖

<dependency>
    <groupId>cn.langpy</groupId>
    <artifactId>disroute</artifactId>
    <version>1.0.9</version>
</dependency>

2、初始化

2.1 Java se 场景下使用可以使用静态块进行初始化

static{
    Route.init();
    /*Route.init()会进行全类扫描,可以指定项目包进行扫描*/
    /*Route.init(“com.xxx”);*/
}

2.2 springboot项目无需此步骤

3、处理逻辑

import cn.langpy.disroute.core.Route;
import cn.langpy.disroute.core.RouteCallback;
import cn.langpy.disroute.core.RouteResult;

import java.time.LocalDateTime;

public String process(ParamData param) {
    /*入参可以使用自定义的对象参数、Map、JSON等*/
    /*返回的对象类型在Process中自行定义 */
    return Route.build().context(Process.class).param(param).dispatch();
    
    /*异步模式 使用自定义的线程池(不定义使用默认的) 并开启async*/
    //return Route.build().context(Process.class).param(param).executor(new Myexecutor()).async(true).dispatch();
    
    /*回调模式:在程序执行完之后可以进行执行结果回调*/
//    return Route.build().context(Process.class).param(param).callback(new RouteCallback<ParamData, String>() {
//        @Override
//        public void callback(RouteResult<ParamData, String> call) {
//            /*入参*/
//            ParamData param = call.getParam();
//            /*执行结果*/
//            String result = call.getResult();
//            /*开始时间*/
//            LocalDateTime startTime = call.getStartTime();
//            /*结束时间*/
//            LocalDateTime endTime = call.getEndTime();
//        }
//    }).dispatch();
}

4、处理方法定义

4.1 默认写法

import cn.langpy.disroute.annotation.Route;
@Route
public class Process{

    /*ParamData对象的state==1时跳转执行该方法*/
    /*参数类型和Route.dispatch(param)传入的类型保持一致 */
    @Route("/state/1")
    public String state1(ParamData param){
        /*这里写处理逻辑*/
      return "我是state==1";
    }

    /*ParamData对象的state==2时跳转执行该方法*/
    @Route("/state/2")
    public String state2(ParamData param){
        /*这里写处理逻辑*/
      return "我是state==2";
    }

    /*ParamData对象的state==其他数字 时跳转执行该方法 等价于else*/
    @Route("/state/*")
    public String state2(ParamData param){
        /*这里写处理逻辑*/
      return "我是else";
    }
}

4.2 接口模式

第一步:实现RouteInterface接口

T为入参泛型 R为返回类型泛型

import cn.langpy.disroute.core.RouteInterface;
public interface Process<T, R> extends RouteInterface<T, R> {
}

第二步:定义具体的处理类

@Route("/state/1")
public class State1 implements Process<ParamData,String>{
    @Override
    public String onRoute(ParamData param) {
        /*这里写处理逻辑*/
        return "我是state==1";
    }
}

@Route("/state/2")
public class State2 implements Process<ParamData,String>{
    @Override
    public String onRoute(ParamData param) {
        /*这里写处理逻辑*/
        return "我是state==2";
    }
}

@Route("/state/*")
public class StateOther implements Process<ParamData,String>{
    @Override
    public String onRoute(ParamData param) {
        /*这里写处理逻辑*/
        return "我是else";
    }
}

4.3 spring bean使用

有些处理方法中需要注入spring的对象,加上@Component注解即可

import cn.langpy.disroute.annotation.Route;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

@Component
@Route
public class Process{
    
    @Resource
    private UserService userService;
    /*ParamData对象的userType==student时跳转执行该方法*/
    /*参数类型和Route.dispatch(param)传入的类型保持一致 */
    @Route("/userType/student")
    public String state1(ParamData param){
        /*这里写处理逻辑*/
        
      return "我是userType==student";
    }
}

版本说明

V1.0.0:基本功能

特别说明

1.本项目使用java8开发,其他版本未曾试验,如有什么bug还请告知!

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Disroute — это инструмент для обработки распределения состояний. Он определяет разные способы выполнения на основе значения определённого атрибута в объекте и обеспечивает развязку логики обработки, оптимизируя большое количество условных операторов if-else. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/huoyo-disroute.git
git@api.gitlife.ru:oschina-mirror/huoyo-disroute.git
oschina-mirror
huoyo-disroute
huoyo-disroute
master