针对Java开发者的灵魂拷问:
1、梳理的流程,关键逻辑是否有遗漏,理解一致吗?
2、设计时,如何更方便的与产品沟通?原有的设计是否有不合理的?绘制的流程图大家都能理解吗?
3、测试时,是否所有必要的逻辑分支都测试到了?
LAP框架:一个优化研发设计的Java编程框架
我们先看一段简单的代码:
if(...){
return m1(...);
}else if(...){
return m2(...);
}else{
return m3(...);
}
以上的代码,相信大家很容易通过抽象接口或其它方式实现将来的扩展,但两段不同的类似逻辑,是否可以复用呢?通常因为入参类型不同及数量不同等原因,比较难以解决复用问题。
基于LAP框架则如下:
class MyService{
//构建路由策略
private Func<MyResult> policy=new RouteDecision().addRoutes(this,"typePolicy").build(MyResult.class);
@Context(MyServiceContext.class)
public MyResult service(MyParam param){
return policy.apply();
}
@Group("typePolicy")
@Condition(value="${param.type==1",envKey="typePolicy_1")
MyResult m1(MyParam param1){...}
@Group("typePolicy")
@Condition(value="${param.type==2",envKey="typePolicy_1")
MyResult m2(Foo foo){...} //Foo对象可自动从MyServiceContext中取得
@Group("typePolicy")//缺省路由
MyResult m3(MyParam param1){...}
}
@Component
@Scope("prototype")//Spring 原型模式
class MyServiceContext extends CachedContext{
@Setter@Getter
private MyParam param;
@Autowire
private FooService fooService;
public Foo getFoo(){//方法只会在MyService.server的调用线程只调用fooService.findById一次
Func1<Long,Foo> findById=create(fooService:findById).around(new LogAround());//允许输出调用日志(方法入参及出参、异常)
return enableCache(findById).accept(param.getFooId());
}
}
1、LAP框架解决了在不同场景下类似路由策略的复用问题,也支持各种串行、循环、并行、异步、责任链、灰度、AOP等不同策略模式的应用,并允许自定义更多的扩展。
2、LAP框架支持数据逻辑和业务逻辑分离,便于关注我们的核心业务逻辑;同时也优化代码结构,提升整体代码质量。
3、LAP框架定义的组件可以收集核心逻辑的运行情况,并生成跟踪日志和流程图。因此可以基于代码或伪代码优化我们的研发流程:
上面的代码可生成流程图如下,在产品、研发、测试之间沟通更加高效
FAQ:
1、此框架处于什么阶段?
已初步完成框架基础设计,Demo可运行(除生成流程图),计划2023年1月前开源
2、我能参与吗?
欢迎参与LAP框架建设,微信号:li-jin-bj,加我请备注lap