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

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

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

D4代码AC集

贪心问题解决的步骤: (局部贪心能导致全局贪心)    1.确定贪心策略    2.验证贪心策略是否正确 排队接水 #include<bits/stdc++.h>using namespace std;int main(){int w,n,a[32000];cin>>w>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int i=1

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

husky 工具配置代码检查工作流:提交代码至仓库前做代码检查

提示:这篇博客以我前两篇博客作为先修知识,请大家先去看看我前两篇博客 博客指路:前端 ESlint 代码规范及修复代码规范错误-CSDN博客前端 Vue3 项目开发—— ESLint & prettier 配置代码风格-CSDN博客 husky 工具配置代码检查工作流的作用 在工作中,我们经常需要将写好的代码提交至代码仓库 但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的 所

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can