패키지 개발을 위한 표준 코딩 습관 및 지침
- 최종 업데이트2022/05/19
패키지 개발을 위한 표준 코딩 습관 및 지침
이 주제는 고품질 패키지 개발을 위한 표준 코딩 습관 및 지침을 다룹니다.
- 테스트
- 고품질 코딩 보장. 패키지에 대해 충분한 양의 유닛 테스트 및 통합 테스트를 작성합니다.
- 아이콘
- 패키지에 대해 적절한 아이콘을 설정합니다.
- 수동으로 버전 설정
- 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 not은
ex.message
와 같은 일반 오류 메시지를 표시합니다.
-
Do는 의미 있는 에러 메시지를 표시합니다. 예컨대
- 기본 검증
- 이 개발 키트에 포함된
@NotEmpty
와 같은 검증 주석 기호 규칙을 사용하십시오. 기본 검증을 코드에 포함하지 마십시오. 검증 주석 기호 항목을 참조하십시오. - 루프
- 코드에 긴 실행 루프를 넣는 것을 삼가하십시오. 긴 실행 루프는 CPU 용량을 많이 차지하여 "Bot이 반응하지 않습니다."와 같은 오류 발생의 원인이 될 수 있습니다.
- 로깅 추가
- Bot 런타임 프레임워크에서 제공되는 기본 log4J 로거를 사용하십시오. 자체적인 로거는 추가하지 마십시오. 자세한 정보는 샘플 코드를 참조하십시오.
- 로깅 레벨
-
- 오류/심각: 사용자에게 영향을 미치고 해결 방법이 없는 심각한 오류 이벤트입니다.
- 경고: 예기치 않은 오류가 발생했지만 시스템이 복구되었습니다.
- 정보: 상태 변경에 대한 정보 메시지(예: 수락된 요청)
- 디버그: 문제가 발생할 때 디버깅에 필요한 자세한 진단 정보.
-
추적: 애플리케이션 동작에 대한 모든 정보가 캡처됩니다.
로그 수준을 잘 모르면 추적으로 설정하십시오.
- 리소스 로드 중
- 모든 리소스는 다음 예와 같이 현재 스레드 컨텍스트 클래스 로더를 사용하여 로드해야 합니다.
Thread.currentThread().getContextClassLoader().getResourceAsStream("resource.json");