軟件編程中的一些規範

項目開發一直到項目部署相關規範

項目開發規範

一,項目開發

編碼格式儘量統一,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:以上內容有一部分硬勢配置是必須要有的,部分內容都是個人的意見,僅供參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章