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

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

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计