软件编程中的一些规范

项目开发一直到项目部署相关规范

项目开发规范

一,项目开发

编码格式尽量统一,UTF-8.

  1. 开发工具规范

在Minelab组经过调研,组员目前使用最多的编码开发工具eclipse或者Idea,编码的语言目前大部分使用的是java语言,当然也无外乎其他的语言,比如python等。

首先针对开发工具来说,eclipse的使用中,工具的版本不强硬的要求,工具的插件下载无特殊要求。开发工具中的环境变量本人暂定使用jdk1.8版本,使用jdk1.8的原因有几点:第一,编码的编辑环境决定了后期代码的编译环境,以及代码运行出来的结果尤其是结果的精确度。第二,查询jdk下载的英文官网,在很久已经关闭了1.8之前版本的下载,这也说明了这是1.8即将成为jdk的最低版本的必然趋势。

  • 在所有新的开发工具的出现都会选择先去兼容最新版本的环境变量,比如我这次涉及到的jenkins搭建,实验证明,jenkins搭建方案是一的话,那就对环境变量版本的高低无强硬的要求,但是依据显示问题,暂定使用第二套方案进行部署jenkins,所以jdk版本的问题就成为必须要考虑的问题,多次测试显示jenkins使用低版本jdk会对后面的功能拓展产生局限性,甚至对现在很多插件的支持都会有影响。下面两张图是实施jdk1.7方案二的结果

 

  • 查询jenkins官网,我们可以看到jenkins明确标注出来对soft的要求。

 

  1. 代码中的规范

2.1编码规范

2.1 project、package、class、变量、方法命名 

2.1.1 异常捕获与处理 

2.1.2空引用判断 

2.1.3 代码格式化 

2.1.4 注释 

2.1.5 日志 

2.1.6 尽量采用java8的函数式编码 

2.1.7 删除无用import、变量 、方法

2.1.8 尽量使用JsonUtil序列化对象的方式取代拼接json串 

2.1.9 对于可能会发生变化或测试与线上值不同的变量改为读配

2.1.10 删除注释掉的代码

2.2性能优化

2.2 class、变量、方法修饰符 

2.2.1 变量、方法的提取与重用 

2.2.2 代码繁琐,有更简单的实现方式

2.2.3 及时关闭流

2.2.4 for中的变量(包括循环条件中变量的重复计算与循环体中反复声明新变量) 

2.2.5 采用懒加载 

2.2.6 不要在循环体中try 

2.2.7 合理使用单例 

2.2.8 广播变量的合理使用与释放 

2.2.9  spark算子的合理使用 

2.2.10  SimpleDateFormat非线程安全,不要声明为全局变量

2.3逻辑验证与bug发现

2.3 if、else、与、或、非验证 

2.3.1 发现bug按测试流程提交Issues

  1. Pom.xml文件的规范模板

针对现有Minelab的已有的业务进行整理出一份通用的pom.xml文件

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

 

<groupId>cn.com.cennavi.minelab.xx</groupId>

<artifactId>项目名称</artifactId>

<version>xxx</version>

<packaging>jar</packaging>

<name>项目名称</name>

<url>http://maven.apache.org</url>

 

 

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

<dependency>

<groupId>org.apache.spark</groupId>

<artifactId>com_cennavi_tymon_common</artifactId>

<scope>system</scope>

</dependency>

<dependency>

<groupId>jdk.tools</groupId

<artifactId>jdk.tools</artifactId>

 

<scope>system</scope>

 

</dependency>

<!-- <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId>

<version>2.7.2</version> </dependency> -->

 

 

</dependencies>

<repositories>

<repository>

<snapshots>

<enabled>false</enabled>

</snapshots>

<id>central</id>

<name>Central Repository</name>

<url>https://repo.maven.apache.org/maven2</url>

</repository>

<repository>

<id>maven2-repository.dev.java.net</id>

<name>Java.net repository</name>

<url>http://download.java.net/maven/2</url>

</repository>

<repository>

<id>osgeo</id>

<name>Open Source Geospatial Foundation Repository</name>

<url>http://download.osgeo.org/webdav/geotools/</url>

</repository>

<repository>

<snapshots>

<enabled>true</enabled>

</snapshots>

<id>boundless</id>

<name>Boundless Maven Repository</name>

<url>http://repo.boundlessgeo.com/main</url>

</repository>

</repositories>

 

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-dependency-plugin</artifactId>

<version>3.0.1</version>

<executions>

<execution>

<id>copy-dependencies</id>

<phase>package</phase>

<goals>

<goal>copy-dependencies</goal>

</goals>

<configuration>

<outputDirectory>${project.build.directory}/lib</outputDirectory>

<overWriteReleases>false</overWriteReleases>

<overWriteSnapshots>false</overWriteSnapshots>

<overWriteIfNewer>true</overWriteIfNewer>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

</project>

 

4,log4j.properties文件的配置使用

创建一个log4j.properties文件放到resources 目录下。

Pom.xml导入依赖:

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version>

</dependency>

 

# 日志收集器的操作 

log4j.rootLogger=DEBUG, stdout, file

# 将日志信息定向到控制台 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 将日志信息定向到文件中 

log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=C:\\log4j-application.log 

log4j.appender.file.MaxFileSize=5MB

log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

%d{yyyy-MM-dd HH:mm:ss} = 设置日期时间格式

%-5p = 设置日志的优先级, 像DEBUG 或者ERROR级别. -5 是可选的, 为了打印漂亮的格式.

%c{1} = 我们通过getLogger()得到的日志名字

%L = 记录行号.

%m%n = 日志和中断行的信息.

日志信息也有不同的级别,例如,debug、info、warn、error和fatal。

二,项目部署规范

  1. 主函数jar包和依赖jar包规范

目前了解到项目代码存放在/home/hadoop/azkaban路径下的相关项目文件中,每个项目文件中都大概存储三个文件:一个是lib,config,matchtable三个文件,lib文件下面存储的所有的jar包,jar种类分两种,主函数的jar包和依赖的外部jar包。

主函数jar包部署分两类:测试jar和正式jar

测试jar的更新,至少保留一份备份.bak,更新替代的时间加入jar名称当中以作标识。

正式jar的更新,至少保留两份备份.bak,更新替代的时间加入jar名称当中以作标识(以防代码回滚前一版本的纠结)。

依赖的jar包存储的本地、测试以及线上,版本和jar包的数量要一致,同名称jar包更换新版本的告知相关使用开发人员,做好观察运行结果的准备。旧版本的依赖jar包放到自己的本地仓库中以作备份。

  1. 配置文件的规范

配置文件在maven项目中存放的位置尽量统一,方便后续的自动化构建,以及打包集成使用查询更方便,resource下面存放使用到的.csv类似的相关数据,resource-->conf下面放置所有的配置文件例如.xml、.property等。与src同一层目录创建一个doc文件,用来存储相关项目的word的说明文档。

Ps:以上内容有一部分硬势配置是必须要有的,部分内容都是个人的意见,仅供参考。

猜你喜欢

转载自blog.csdn.net/qq_34649040/article/details/82314742
今日推荐