本文主要是介绍程序员是如何看待“祖传代码”的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
程序员是如何看待“祖传代码”的?
程序员眼中的“祖传代码”,就像一本古老而神秘的魔法书,藏着无穷的智慧和技巧,有些代码像家传宝贝,有些像祖传秘方。快来分享一下你遇到的“祖传代码”吧~
方向一:祖传代码的历史与文化价值
第一类非常有用的祖传代码是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已经封装好的工具类:
- java.lang.String:
- 字符串操作,如拼接、截取、比较、转换大小写等。
- 提供正则表达式匹配功能。
- java.util.Arrays:
- 静态工具类,提供数组操作的多种方法,如排序、搜索、填充等。
- java.util.Collections:
- 静态工具类,提供集合操作的多种方法,如排序、旋转、复制、查找等。
- java.util.Objects:
- 提供了一系列静态方法,用于比较对象、检查对象是否为空、计算对象的哈希码等。
- java.util.concurrent.atomic:
- 提供原子变量类,如
AtomicInteger
、AtomicLong
等,用于实现线程安全的计数器、序列号生成器等。
- 提供原子变量类,如
- java.text.DecimalFormat:
- 格式化数字为指定的小数位数。
- java.time (Java 8及以上版本):
- 提供日期和时间API,包括
LocalDate
、LocalTime
、LocalDateTime
、Duration
、Period
等,用于处理日期、时间和时间间隔。
- 提供日期和时间API,包括
- java.nio:
- 提供非阻塞I/O操作,包括
ByteBuffer
、FileChannel
等,用于高性能的文件和网络I/O。
- 提供非阻塞I/O操作,包括
- java.util.Optional:
- 提供Optional容器类,用于解决空指针异常问题,支持链式调用。
- java.util.function:
- 提供函数式接口,如
Function
、Predicate
、Consumer
等,支持Lambda表达式和函数式编程。
- 提供函数式接口,如
- java.util.stream:
- 提供流API,支持集合的声明式处理,如过滤、映射、排序、聚合等。
- org.apache.commons.lang3:
- Apache Commons Lang是一个增强Java核心类库的辅助工具包,提供了许多有用的工具类,如
StringUtils
、NumberUtils
、ArrayUtils
等。
- Apache Commons Lang是一个增强Java核心类库的辅助工具包,提供了许多有用的工具类,如
- org.apache.commons.collections4:
- Apache Commons Collections提供额外的集合操作,如
CollectionUtils
、MapUtils
等。
- Apache Commons Collections提供额外的集合操作,如
- org.apache.commons.io:
- Apache Commons IO提供了I/O操作的工具类,如文件操作、流操作、字符编码转换等。
- org.slf4j:
- SLF4J是一个日志框架的抽象层,允许在运行时替换日志实现,如Logback、Log4j等。
- Guava:
- Google的Guava库提供了许多实用的工具类,如
Joiner
、Splitter
、Preconditions
、CacheBuilder
等。
- Google的Guava库提供了许多实用的工具类,如
- Apache Commons Math:
- 提供了数学和统计相关的工具类,如矩阵运算、概率分布、随机数生成等。
- 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私库管理的建议:
- 使用私有仓库:私有仓库是存储和管理私有依赖的地方。你可以使用Nexus、Artifactory等私有仓库管理工具来搭建自己的私有仓库。这些工具提供了丰富的功能,如权限控制、版本管理、依赖分析等,帮助你更好地管理私有依赖。
- 配置settings.xml:在Maven的settings.xml文件中,你需要配置私有仓库的地址、认证信息等。这样,Maven在构建项目时就能够从私有仓库中下载依赖。
- 使用deploy命令:当你需要发布自己的依赖到私有仓库时,可以使用Maven的deploy命令。在项目的pom.xml文件中,你需要配置distributionManagement元素,指定发布到哪个仓库以及仓库的地址等信息。
- 版本控制:对于私有依赖,建议使用语义化版本控制,这样能够更好地管理依赖的版本和兼容性。同时,也建议定期清理不再使用的旧版本依赖,以保持仓库的整洁和高效。
- 依赖分析:使用私有仓库管理工具提供的依赖分析功能,可以帮助你了解项目中各个依赖之间的关系和依赖冲突,从而更好地优化依赖管理。
- 权限控制:对于私有仓库,需要进行权限控制,确保只有具有相应权限的用户才能够访问和修改仓库中的依赖。这可以通过私有仓库管理工具提供的权限管理功能来实现。
总之,Maven私库管理是一个复杂而重要的任务。通过合理使用私有仓库管理工具、配置settings.xml、使用deploy命令、版本控制、依赖分析和权限控制等手段,可以帮助你更好地管理私有依赖,提高项目的构建和部署效率。
这篇关于程序员是如何看待“祖传代码”的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!