최종 반환 객체 Record 설계
문제점
Record를 반환할 수 있는 방법은 다음과 같은 방법이 가장 쉽다.
•
new Record(List<String> field)
하지만 이런 방식의 경우 단점은 다음과 같다.
1.
Record를 완성 이후 검증 작업 필요
2.
RecordParser 측과 FieldParser 측 둘다 Record에 종속성이 발생할 수 있음. 최대한 줄여도 한쪽에는 무조건 생김
가안
RecordBuilderConfig - RecordBuilder - Record
•
RecordBuilderConfig
◦
build시에 필요한 검증, 변환 등의 함수를 미리 설정
•
RecordBuilder
◦
이하 Config 측에서 얻은 하나의 객체를 활용하여 List<String> fields 를 받아 Record를 생성하면된다.
◦
RecordParser와 FieldParser측 둘다 RecordBuilder에 의존성이 생김. 즉 Record가 변화해도 크게 변화가 없음.
◦
Config에 저장된 callback로직에 의해 자동 검증이 이루어지기에 따로 할 일이 없음
•
Record의 무게를 상대적으로 가볍게 유지 가능(getter, setter 외 있을게 없음)
RecordBuilderConfig 옵션
1. validate(Predicate<List<String>> validator)
(입력 검증)
2. convert(Function<List<String>, Record<T>> converter)
(타입 변환)
3. defaultValues(List<String> defaults)
(기본값 설정)
4. skipEmptyFields(boolean skip)
(빈 값 제거)
5. buildAfter(Consumer<Record> action)
(빌드 후 추가 액션)
6. buildAutomatically(boolean autoBuild)
(자동 빌드 옵션)
7. onError(BiConsumer<Exception, List<String>> errorHandler)
(예외처리 콜백)
8. skipLine(int count)
(skip할 라인 지정)
9. nameLine(int number)
(필드 이름이 있는 위치)
10. commentSkip(boolean isSkip)
(코멘트 라인을 스킵 결정)