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

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

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部