三分钟了解LAP编程框架

news2024/7/4 5:50:59

针对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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

316页11万字AI赋能智慧水利大数据信息化平台建设和运营解决方案

第一章 系统综述 1.1 项目背景 1.2 系统概述 1.3 需求分析 1.3.1 中心管控需求 1.3.2 前端监测需求 1.4 建设目标 1.5 设计原则 1.6 设计依据 第二章 系统总体设计 2.1 总体设计思路 2.2 架构设计 2.2.1 逻辑架构 2.2.2 系统架构 2.3 关键技术应用 2.4 系统特色…

代码随想录刷题|LeetCode 647. 回文子串 516.最长回文子序列

647. 回文子串 题目链接&#xff1a;https://leetcode.cn/problems/palindromic-substrings/ 思路 动态规划思路 1、确定dp数组 布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如果是dp[i][j]为tr…

【真的?】用 ChatGPT 写一篇 Python 翻译库博客,可以打 9 分

今天来个大的实践项目&#xff0c;用 ChatGPT 写一篇博客&#xff0c;冲击一下热榜&#xff01; 从零开始玩 ChatGPT⛳️ ChatGPT 亮点⛳️ 账号篇⛳️ 第一次使用⛳️ 用 Python 实现一个英汉互译的小程序⛳️ googletrans 库核心用法⛳️ 再补充一些知识点⛳️ googletrans 和…

功率放大电路和电压放大电路的区别是什么意思

功率放大电路和电压放大电路都属于模拟电路&#xff0c;是工程师日常经常用到的比较常见的模拟电路&#xff0c;很多小白工程师对于功率放大电路和电压放大电路的区别都很好奇&#xff0c;下面就来看看区别有哪些。 图&#xff1a;功率放大电路与电压放大电路对比 1、功能和基本…

docker之网络配置

目录一、网络模式1.bridge模式(默认模式)2.host模式3.初识网络模式二、bridge模式三、host模式四、自定义网络一、网络模式 Docker在创建容器时有四种网络模式&#xff1a;bridge/host/container/none&#xff0c;bridge为默认不需要用–net去指定&#xff0c;其他三种模式需要…

微服务框架 SpringCloud微服务架构 19 文档操作 19.2 修改文档

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构19 文档操作19.2 修改文档19.2.1 修改文档19.2.2 总结19 文档操作 19.2 修…

推荐一款超级好用的工具:uTools详解使用

介绍 uTools 是什么&#xff1f;下载并安装uTools 能做什么&#xff1f;一切皆插件超级面板 uTools 是什么&#xff1f; uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件&#xff0c;打造你得心应手的工具集合。 通过快捷键&#xff08;默认 alt…

红队隧道应用篇之CS正反向连接突破内网(二)

正向连接 环境拓扑图 操作步骤 在CS客户端新建一个TCP协议的监听, 监听端口为4444 创建无状态木马(Windows Executable(S)), 选择上述建立的TCP监听器, 随后将无状态木马放到不出网的内网主机中去运行, 运行后内网主机就会监听本机的4444端口 在web服务器的beacon命令行输入:…

EMQX安装与使用

EMQX文档&#xff1a;https://www.emqx.io/docs/zh/v5.0/ 1.安装 https://www.emqx.io/zh/downloads 找到自己合适的平台和版本安装 ①&#xff1a;后台启动 emqx start启动成功后可以使用 emqx ping 命令检测节点运行状态&#xff0c;返回 pong 则表示正常运行&#xff1a; …

pmp 证书到底有什么用处?

PMP 证书最重要的两个用处&#xff1a;一个是岗位招聘要求&#xff0c;一个是项目招标要求。 一、PMP证书的应用 1、PMP 证书的敲门砖作用 前面说的&#xff0c;PMP 作为项目管理领域的一个权威公认证书&#xff0c;很多行业要求项目管理岗位人才都会加一条"具备PMP 等证…

Redis vs MongoDB

Redis vs MongoDB 通常情况下&#xff0c;应用系统的技术选型&#xff0c;对于如何选择非关系型数据库&#xff0c;是一个不小的挑战。这不仅考验架构师在技术上的广度和深度&#xff0c;同时也考究对业务细节了解和熟悉程度。只有将业务场景、业务特点、数据特征跟具体的技术…

数据挖掘与机器学习课程总结

2022.11月 文章目录一、引言1.1 数据中的知识发现包括哪几个步骤&#xff1f;(Knowledge Discovery from Data, KDD)1.2 数据挖掘应用二、学习的可行性2.1 Hoeffding 不等式&#xff08;Hoeffding’s Inequality&#xff09;2.2 用 Hoeffding 不等式说明学习的可行性三、数据和…

浅学Linux内核MMU

1 MMU基本知识 1.1 什么是MMU MMU是 MemoryManagementUnit 的缩写即&#xff0c;内存管理单元. 针对各种CPU, MMU是个可选的配件. MMU负责的是虚拟地址与物理地址的转换. 提供硬件机制的内存访问授权.&#xff08;现代 CPU 的应用中&#xff0c;基本上都选择了使用 MMU&#…

【Paper】2021_具有输入饱和的多智能体系统非负连边比例一致性研究_范志鹏

范志鹏. 具有输入饱和的多智能体系统非负连边比例一致性研究[D].华中科技大学,2021.DOI:10.27157/d.cnki.ghzku.2021.001324. 文章目录3 基于状态反馈的线性离散正系统连边比例一致性控制3.1 引言3.2 基于状态反馈的离散时间连边比例一致性的问题描述3.3 无向网络离散时间连边比…

JavaScript中的localStorage

JavaScript中的localStorage 参考这篇文章一起学习&#xff1a;JavaScript中的session 案例池子&#xff1a; JS实现鼠标悬停变色 JavaScript中的排他算法实现按钮单选 JavaScript中的localStorage JavaScript中的sessionStorage JavaScript实现网页关灯效果 JavaScript实…

Codeforces Round #836 (Div. 2) D. Range = √Sum

翻译&#xff1a; 给你一个整数&#x1d45b;。找到一个由&#x1d45b;不同整数组成的序列&#x1d44e;1&#xff0c;&#x1d44e;2&#xff0c;…&#xff0c;&#x1d44e;&#x1d45b;&#xff0c;使得对于所有&#x1d456;和 马克斯(&#x1d44e;1&#x1d44e;2,……

Qt-数据库开发-QTableView操作数据库(1)

Qt-数据库开发-QTableView操作数据库 文章目录Qt-数据库开发-QTableView操作数据库1、概述2、实现效果3、主要代码4、完整源代码更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;数据库开发 &#x1f448; 1、概述 这是通过学习Qt官方Demo产生的一个示例…

【爬虫5年保更新专栏】异步协程典型案例,一篇掌握~

最近收到 C 友反馈&#xff0c;说 《听说过 python 协程没&#xff1f;听说过 asyncio 库没&#xff1f;都在这一篇博客了》 这篇博客的目标图片站&#xff0c;已经不能使用了&#xff0c;橡皮擦查阅之后&#xff0c;发现是对方网站已经不运营了&#xff0c;所以更新一下案例。…

SessionJSPCookie

今日内容 会话技术。会话技术包括两个&#xff1a; CookieSession JSP的入门学习&#xff1a;JSP也是一种服务器的动态资源&#xff0c;servlet也是一种服务器的动态资源。 会话技术 会话&#xff1a;一次会话中包含多次请求和响应。一次会话就像是人与人的一次见面聊天&…

Maya多边形物体批量材质传递工具v1.0发布及教程

一、插件介绍&#xff1a; 在大量场景制作时&#xff0c;当前期模型和材质没有同时完成&#xff0c;而用白模进行场景搭建后&#xff0c;能否后期&#xff0c;快速根据相同模型结构&#xff0c;快速识别物体并批量赋材质吗&#xff1f;答案是现在可以了。下面介绍的就是解决此…