首页 > 其他分享 >项目依赖库的规范探索

项目依赖库的规范探索

时间:2023-10-20 14:13:55浏览次数:25  
标签:依赖 探索 规范 枚举 版本 使用 引入 二方

二方库

名称 说明
一方库 指项目内的各个模块,一般不会被项目组外所使用,通常使用的是最新版本
二方库 指公司内部公共库,会被公司的各个项目组所使用,而且每个项目组所依赖的版本不一定一致,需要严格管理版本
三方库 一般代指公司外部的公共库,由公司外的开发团队进行版本维护,版本可控性难以控制,公司引入的时候要进行严格的版本验证

在实际项目中一个订单系统通常会是下面的结构

image-20231020120002280

order-server中是订单系统的业务代码,而order-api中会定义一些接口和入参和返回值,order-api会被同项目的其他系统所依赖,也有可能会被其他项目组的系统所依赖,所以一方库和二方库的界限一般比较模糊,下面主要探索api项目的结构规范。

为避免二方库的依赖冲突问题,二方库的发布应该遵循以下原则

  • 精简可控原则,移除一切不必要的API和依赖,只包含Service API,必要的领域模型对象,常量、枚举等,如果依赖其他的二方库或者三方库,尽量的使用provided引入,让使用者选择具体使用的版本号。
  • 稳定可追溯原则,每个版本的变化应该被记录,除非用户主动升级版本,否则二方库的行为不应该发生变化。二方库的新增或者升级需保持功能点之外的依赖不应该发生改变,如果需要发生改变,需要给出明确的评估和验证。

除以上两个原则外,还总结了以下需要注意的关键点

  • 二方库中可以定义枚举类型,参数可以使用枚举类型,但接口的返回值禁止使用枚举类型或者包含枚举类型的对象。

    说明:随着功能的迭代,枚举类型有可能发生变化,参数中使用枚举类型可以限制相关字段的合法性,但是返回值中则不同,如果后续版本中枚举增加,而其他系统依赖的是低版本的库,那么使用者在进行反序列化时会发生异常。

  • 二方库的新增或升级,保持除功能点之外的其它 jar 包仲裁结果不变。如果有改变,必须明确评 估和验证。

    说明:在升级时,进行 dependency:resolve 前后信息比对,如果仲裁结果完全不一致,那么通过 dependency:tree 命 令,找出差异点,进行排除 jar 包。

  • 建议将依赖的放在父项目的中,所有版本仲裁放在语句块中。

    说明:只声明版本,并不引入,因此子项目中需要显示的引入,version和scope都读取中的声明。而所有声明里的依赖都会自动引入,并默认被所有的子项目继承。

  • 二方库中尽量不要有配置项,配置项应该由使用者进行定义

  • 二方库应该尽量的简洁,如果必须使用一些三方库,尽量的使用provided引入,例如需要使用lombok,那么使用provided由使用者去进行引入,否则可能会造成版本冲突。

标签:依赖,探索,规范,枚举,版本,使用,引入,二方
From: https://www.cnblogs.com/wrxiang/p/17776911.html

相关文章

  • 软件依赖管理-源码依赖、接口依赖、服务依赖
    在软件开发领域中,源码依赖、接口依赖和服务依赖是三种不同类型的依赖关系,它们有不同的特点和优缺点。下面我会详细解释它们的区别和各自的优缺点源码依赖(SourceCodeDependency)源码依赖是指一个软件项目依赖于其他软件项目的源代码。这通常发生在开源软件开发中,一个项目使用了......
  • 揭秘计算机的神经系统:探索计算机的基本组成
    计算机的基本硬件组成CPU被比喻为人类大脑,其作用是指挥和控制人体的各项功能。而内存和硬盘则相当于大脑中的记忆板块,用于记录和存储信息。主板则类似于人的神经系统,起到连接和协调人体各个部分的作用。显卡则类似于人的眼睛,负责显示图像和视频。而计算机的电源则类似于人的心脏......
  • ASP.NET Core中对开放泛型(Open Generic)的依赖注入
    publicinterfaceIRepository<T>{voidAdd(Tentity);List<T>Get();}publicclassRepository<T>:IRepository<T>{List<T>_list=newList<T>();publicvoidAdd(Tentity){_list.Add(entit......
  • JSON 返回数据命名不规范问题
    问题描述后端代码如下:@DatapublicclassUserDto{privateStringmUserName;privateStringmPassword;}@RestController@Slf4jpublicclassUserController{@PostMapping("/user")publicStringgetUserData(@RequestBodyUserDtouserDto){......
  • Spring:通过@Lazy解决构造方法形式的循环依赖问题
    一、定义2个循环依赖的类packagecn.edu.tju.domain2;importorg.springframework.context.annotation.Lazy;importorg.springframework.stereotype.Component;@ComponentpublicclassA{privatefinalBb;publicBgetB(){returnb;}@......
  • LLM探索:为ChatGLM2的gRPC后端增加连续对话功能
    前言之前我做AIHub的时候通过gRPC的方式接入了ChatGLM等开源大模型,对于大模型这块我搞了个StarAI框架,相当于简化版的langchain,可以比较方便的把各种大模型和相关配套组合在一起使用。主要思路还是用的OpenAI接口的那套,降低学习成本,但之前为了快速开发,就只搞了个简单......
  • 中国模式识别与计算机视觉大会|多模态模型及图像安全的探索及成果
    前言随着人工智能技术的不断演进,多模态大模型已是当下比较热的研究方向,它可以同时理解和生成多种输入和输出模态,如文本、图像、语音等,能够更好地模拟人类的多感知能力,给文档图像的分析处理带来了新的机遇和挑战!近期,中国模式识别与计算机视觉大会在厦门举办,是国内顶级的模式识别和计......
  • 39 依赖注入
    只能“父传子”在main.js中可以提供全局变量asynchron:异步synchronized:同步......
  • 【JAVA】org.apache.http依赖
     <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency>&l......
  • 【JAVA】org.apache.commons.codec依赖
     <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>......