程序员是如何看待“祖传代码”的

2024-02-28 20:44
文章标签 代码 程序员 看待 祖传

本文主要是介绍程序员是如何看待“祖传代码”的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序员是如何看待“祖传代码”的?

程序员眼中的“祖传代码”,就像一本古老而神秘的魔法书,藏着无穷的智慧和技巧,有些代码像家传宝贝,有些像祖传秘方。快来分享一下你遇到的“祖传代码”吧~
 

方向一:祖传代码的历史与文化价值

第一类非常有用的祖传代码是java中大量的工具类,这就避免了重复造轮子的工作,比如日期的工具类,比如http的工具了,比如JSON转换的工具类,比如加解密的工具类等等。这些代码如果有一份完整而规范的代码,不管在开发或者架构中都是很有帮助的。

如时间工具类:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class DateTimeUtils {/*** 获取当前时间,格式为:yyyy-MM-dd HH:mm:ss* @return*/public static String getDateStr() {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(new Date());}/*** 获取当前时间,格式为:yyyy-MM-dd* @return*/public static String getDayStr() {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");return df.format(new Date());}/*** 获取到月份,格式为:yyyyMM* @return*/public static String getThisMonth() {SimpleDateFormat df = new SimpleDateFormat("yyyyMM");return df.format(new Date());}/*** 获取到月份,格式为:yyyyMMdd* @return*/public static String getYyyyMMdd() {SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");return df.format(new Date());}/** * @description: 两个String类型,按照日期格式对比 *              eg: *                  dateOne:2015-12-26 *                  dateTwo:2015-12-26 *                  dateFormatType: yyyy-MM-dd *                  返回类型:-1:dateOne小于dateTwo, 0:dateOne=dateTwo ,1:dateOne大于dateTwo * @param dateOne * @param dateTwo * @param dateFormatType:yyyy-MM-dd / yyyy-MM-dd HH:mm:ss /等 * @return -1,0,1,100   * @throws */  public static int compareTime(String dateOne, String dateTwo , String dateFormatType){  DateFormat df = new SimpleDateFormat(dateFormatType);  Calendar calendarStart = Calendar.getInstance();  Calendar calendarEnd = Calendar.getInstance();  try {  calendarStart.setTime(df.parse(dateOne));  calendarEnd.setTime(df.parse(dateTwo));  } catch (ParseException e) {  e.printStackTrace();  return 100;  }  int result = calendarStart.compareTo(calendarEnd);  if(result > 0){  result = 1;  }else if(result < 0){  result = -1;  }else{  result = 0 ;  }  return result ;  } /*** 获取当前时间,格式为: HH:mm:ss* @return*/public static String getHHmmSS() {SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");return df.format(new Date());}public static void main(String[] args) throws ParseException {System.out.println(DateTimeUtils.getHHmmSS());}//将时间转换为时间戳public static String dateToStamp(String s) throws ParseException {String res;SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = simpleDateFormat.parse(s);long ts = date.getTime();res = String.valueOf(ts);return res;}/*** 获取昨天日期"yyyy-MM-dd"* @return*/public static String getYesterday() {DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");Calendar calendar=Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY,-24);return    dateFormat.format(calendar.getTime());}}

这是jdk已经封装好的工具类:

  1. java.lang.String:
    • 字符串操作,如拼接、截取、比较、转换大小写等。
    • 提供正则表达式匹配功能。
  2. java.util.Arrays:
    • 静态工具类,提供数组操作的多种方法,如排序、搜索、填充等。
  3. java.util.Collections:
    • 静态工具类,提供集合操作的多种方法,如排序、旋转、复制、查找等。
  4. java.util.Objects:
    • 提供了一系列静态方法,用于比较对象、检查对象是否为空、计算对象的哈希码等。
  5. java.util.concurrent.atomic:
    • 提供原子变量类,如AtomicIntegerAtomicLong等,用于实现线程安全的计数器、序列号生成器等。
  6. java.text.DecimalFormat:
    • 格式化数字为指定的小数位数。
  7. java.time (Java 8及以上版本):
    • 提供日期和时间API,包括LocalDateLocalTimeLocalDateTimeDurationPeriod等,用于处理日期、时间和时间间隔。
  8. java.nio:
    • 提供非阻塞I/O操作,包括ByteBufferFileChannel等,用于高性能的文件和网络I/O。
  9. java.util.Optional:
    • 提供Optional容器类,用于解决空指针异常问题,支持链式调用。
  10. java.util.function:
    • 提供函数式接口,如FunctionPredicateConsumer等,支持Lambda表达式和函数式编程。
  11. java.util.stream:
    • 提供流API,支持集合的声明式处理,如过滤、映射、排序、聚合等。
  12. org.apache.commons.lang3:
    • Apache Commons Lang是一个增强Java核心类库的辅助工具包,提供了许多有用的工具类,如StringUtilsNumberUtilsArrayUtils等。
  13. org.apache.commons.collections4:
    • Apache Commons Collections提供额外的集合操作,如CollectionUtilsMapUtils等。
  14. org.apache.commons.io:
    • Apache Commons IO提供了I/O操作的工具类,如文件操作、流操作、字符编码转换等。
  15. org.slf4j:
    • SLF4J是一个日志框架的抽象层,允许在运行时替换日志实现,如Logback、Log4j等。
  16. Guava:
    • Google的Guava库提供了许多实用的工具类,如JoinerSplitterPreconditionsCacheBuilder等。
  17. Apache Commons Math:
    • 提供了数学和统计相关的工具类,如矩阵运算、概率分布、随机数生成等。
  18. Lombok:
    • Lombok通过注解的方式简化了Java类的编写,如自动生成getter、setter、toString、equals、hashCode等方法。

以上仅为部分常用工具类的简单总结,实际上Java生态系统中还有许多其他的库和工具类可供选择和使用,具体选择哪个取决于项目的需求和开发者的偏好。

方向二:祖传代码的技术挑战与机遇

 第二类祖传代码就是微服务逆向工程代码,有了这个工程就能在表设计好,就能逆向生成微服务的框架,基本的增删查改,分页都有。

<outputs outputDir="{root}/out"><!--生成服务包--><output name="base" subOutputDir="{service}/{service}/src/main/java/" template="entity" package-name="{entityPackage}"><rule><prop key="tableName">tableName</prop><prop key="columnName">columnName</prop></rule><filePattern>{package-name}/{class-name}.java</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="dto" package-name="{dtoPackage}"><filePattern>{package-name}/{class-name}DTO.java</filePattern></output><!--<output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="client" package-name="{clientPackage}"><filePattern>{package-name}/{class-name}Client.java</filePattern></output>--><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="constant" package-name="{constantPackage}"><filePattern>{package-name}/{class-name}Constant.java</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="controller" package-name="{controllerPackage}"><filePattern>{package-name}/{class-name}Controller.java</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="service" package-name="{servicePackage}"><filePattern>{package-name}/{class-name}Service.java</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="dao" package-name="{daoPackage}"><filePattern>{package-name}/{class-name}Mapper.java</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="baseApplication" package-name="{applicationPackage}"><filePattern>{package-name}Application.java</filePattern></output><output extends="base" subOutputDir="{service}/{service}/" template="modulePom" package-name=""><filePattern>pom.xml</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/resources/" template="bootstrap" package-name=""><filePattern>bootstrap.yml</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/resources/" template="application" package-name=""><filePattern>application.yml</filePattern></output><output extends="base" subOutputDir="{service}/{service}/src/main/resources/META-INF" template="app" package-name=""><filePattern>app.properties</filePattern></output><output extends="base" subOutputDir="{service}/{service}/target" template="target" package-name=""><filePattern>target-test.txt</filePattern> </output><output extends="base" subOutputDir="{service}/{service}/src/main/java/" template="cache" package-name="{cachePackage}"><filePattern>{package-name}/{class-name}Cache.java</filePattern></output></outputs>

方向三:祖传代码与现代开发实践的融合

第三类组织代码就是核心产品代码,比如分库分表,搜索,支付场景代码,订单代码。这些东西都能封装出共性,做一个电商系统,轻而易举。大多数都是大同小异。

 

方向四:祖传代码的管理与维护策略

第四类,就是已经达成产品的jar包,通过maven管理,组建私库。

maven私库管理

Maven私库管理主要涉及到私有依赖的管理和分发。在Maven项目中,依赖管理是一项重要的任务,它涉及到项目的构建、运行和部署。私有依赖是指那些不在公共Maven仓库中,而是在公司内部或者特定的私有仓库中的依赖。

Maven私库管理的主要目的是提供一个可靠、高效、可控的私有依赖管理解决方案,以确保项目的依赖能够正确地加载、构建和部署。下面是一些关于Maven私库管理的建议:

  1. 使用私有仓库:私有仓库是存储和管理私有依赖的地方。你可以使用Nexus、Artifactory等私有仓库管理工具来搭建自己的私有仓库。这些工具提供了丰富的功能,如权限控制、版本管理、依赖分析等,帮助你更好地管理私有依赖。
  2. 配置settings.xml:在Maven的settings.xml文件中,你需要配置私有仓库的地址、认证信息等。这样,Maven在构建项目时就能够从私有仓库中下载依赖。
  3. 使用deploy命令:当你需要发布自己的依赖到私有仓库时,可以使用Maven的deploy命令。在项目的pom.xml文件中,你需要配置distributionManagement元素,指定发布到哪个仓库以及仓库的地址等信息。
  4. 版本控制:对于私有依赖,建议使用语义化版本控制,这样能够更好地管理依赖的版本和兼容性。同时,也建议定期清理不再使用的旧版本依赖,以保持仓库的整洁和高效。
  5. 依赖分析:使用私有仓库管理工具提供的依赖分析功能,可以帮助你了解项目中各个依赖之间的关系和依赖冲突,从而更好地优化依赖管理。
  6. 权限控制:对于私有仓库,需要进行权限控制,确保只有具有相应权限的用户才能够访问和修改仓库中的依赖。这可以通过私有仓库管理工具提供的权限管理功能来实现。

总之,Maven私库管理是一个复杂而重要的任务。通过合理使用私有仓库管理工具、配置settings.xml、使用deploy命令、版本控制、依赖分析和权限控制等手段,可以帮助你更好地管理私有依赖,提高项目的构建和部署效率。

这篇关于程序员是如何看待“祖传代码”的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756572

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时