패키지 개발을 위한 표준 코딩 습관 및 지침

이 주제는 고품질 패키지 개발을 위한 표준 코딩 습관 및 지침을 다룹니다.

테스트
고품질 코딩 보장. 패키지에 대해 충분한 양의 유닛 테스트 및 통합 테스트를 작성합니다.
아이콘
패키지에 대해 적절한 아이콘을 설정합니다.
수동으로 버전 설정
SDK 패키지 빌드 버전은 빌드가 발생할 때마다 자동으로 업데이트됩니다. 그러나 공통 build.gradle 파일의 명령 프로젝트에서 수동으로 설정할 수 있습니다.
  • 빌드 전에 build.gradle 파일을 업데이트하십시오.
  • 아래와 같이 마침표로 구분하여 최대 4자리 숫자를 입력합니다.

. . .
ext {
    version '2.0.8'
}
dependencies {...}
종속성
JAR 패키지에서 모든 종속성을 임베드합니다. 런타임에 임시 위치에 종속성을 추출하여 불러옵니다. 임시 위치는 종속성을 불러온 후 정리해야 합니다.
종속 JAR 파일
build.gradle 파일의 종속성에서 종속 JAR 파일을 구현으로 추가하여 종속 JAR 파일이 패키징되도록 합니다.
	
. . .
dependencies {
		compileOnly name: 'command-annotations'
		compileOnly name: 'bot-runtime'
		compileOnly name: 'bot-api'
		implementation name: 'i18n-api'
              implementation name: 'mydependentjavafile.jar'
		apt name: 'command-processor'
		compileOnly group: 'org.apache.logging.log4j', name: 'log4j-core', version: "$loggerVersion"
		testImplementation "org.testng:testng:$testNgVersion"
		testImplementation name: 'bot-runtime'
		testImplementation name: 'bot-api'
	}
. . . 
기존 패키지에 새로운 작업을 추가합니다.
새로운 작업을 기존 패키지에 추가할 때, 패키징 전에 정리를 진행해야 합니다. 항상 gradlew.bat 정리 및 구축, shadowJar 정리 및 구축을 진행하는 것이 권고됩니다.
오류 메시지
의미 있는 오류 메시지를 제공합니다.
  • Do는 의미 있는 에러 메시지를 표시합니다. 예컨대 BotCommandException으로 i18n APIs를 사용하는 로컬 언어의 경우 새로운 예외인 BotCommandException(MESSAGES.getString("Run.Exception.InvalidWorkingDirPath"))를 도출합니다.
  • Do notex.message와 같은 일반 오류 메시지를 표시합니다.
기본 검증
이 개발 키트에 포함된 @NotEmpty와 같은 검증 주석 기호 규칙을 사용하십시오. 기본 검증을 코드에 포함하지 마십시오. 검증 주석 기호 항목을 참조하십시오.
루프
코드에 긴 실행 루프를 넣는 것을 삼가하십시오. 긴 실행 루프는 CPU 용량을 많이 차지하여 "Bot이 반응하지 않습니다."와 같은 오류 발생의 원인이 될 수 있습니다.
로깅 추가
Bot 런타임 프레임워크에서 제공되는 기본 log4J 로거를 사용하십시오. 자체적인 로거는 추가하지 마십시오. 자세한 정보는 샘플 코드를 참조하십시오.
로깅 레벨
  • 오류/심각: 사용자에게 영향을 미치고 해결 방법이 없는 심각한 오류 이벤트입니다.
  • 경고: 예기치 않은 오류가 발생했지만 시스템이 복구되었습니다.
  • 정보: 상태 변경에 대한 정보 메시지(예: 수락된 요청)
  • 디버그: 문제가 발생할 때 디버깅에 필요한 자세한 진단 정보.
  • 추적: 애플리케이션 동작에 대한 모든 정보가 캡처됩니다.

    로그 수준을 잘 모르면 추적으로 설정하십시오.

리소스 로드 중
모든 리소스는 다음 예와 같이 현재 스레드 컨텍스트 클래스 로더를 사용하여 로드해야 합니다.
Thread.currentThread().getContextClassLoader().getResourceAsStream("resource.json");