Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] 템플릿 코드를 리팩터링한다. #970

Open
donghoony opened this issue Nov 17, 2024 · 3 comments · May be fixed by #1011
Open

[BE] 템플릿 코드를 리팩터링한다. #970

donghoony opened this issue Nov 17, 2024 · 3 comments · May be fixed by #1011

Comments

@donghoony
Copy link
Contributor

donghoony commented Nov 17, 2024

🔍 설명

  • 현재 템플릿에서 사용되는 여러 코드들을 리팩터링합니다. mapper의 책임을 조금씩 내려보는 게 어떨까 해서요! 새로운 객체를 도출할 수 있음에도 mapper/validator가 그 생각을 가로막을 수 있는 듯해 생각해보려고 합니다.

🔥 할 일

  • TemplateMapper의 책임 줄이기
  • 각 Dto에 매핑 로직을 넣어보기

⏰ 예상 시간

  • 빠릿빠릿 리팩터링해야 다음 기능이 들어올 때 편하다.

🐴 할 말

@donghoony
Copy link
Contributor Author

현재 TemplateResponse의 계층은 아래와 같다.

TemplateResponse
    ㄴ Template Properties
    ㄴ List<SectionResponse>
        ㄴ Section Properties (including @Nullable)
        ㄴ List<QuestionResponse>
            ㄴ Question Properties (including @Nullable)
            ㄴ OptionGroupResponse (@Nullable)
                ㄴ OptionGroup Properties
                ㄴ List<OptionItemResponse>
                    ㄴ OptionId, content

어휴...

@donghoony
Copy link
Contributor Author

donghoony commented Nov 17, 2024

  • TemplateMapperReviewGroup을 가지면서 강결합되고 있었다. 파라미터로도 이렇게 의존 경계가 흐려질 수 있구나.. 싶었다
    public List<SectionResponse> mapToTemplateResponse(long reviewGroupId, long templateId) {
        Template template = templateRepository.findById(templateId)
                .orElseThrow(() -> new TemplateNotFoundByReviewGroupException(reviewGroupId, templateId));

        return template.getSectionIds()
                .stream()
                .map(this::mapToSectionResponse)
                .toList();
    }

이렇게 매퍼에서는 다루고, 리뷰 그룹 정보를 밖에서 감싸주는 게 더 낫겠다

@Transactional(readOnly = true)
public TemplateResponse generateReviewForm(String reviewRequestCode) {
    ReviewGroup reviewGroup = reviewGroupService.getReviewGroupByReviewRequestCode(reviewRequestCode);
    List<SectionResponse> sectionResponses = templateMapper.mapToTemplateResponse(
            reviewGroup.getId(),reviewGroup.getTemplateId()
    );
    return new TemplateResponse(
            reviewGroup.getTemplateId(), reviewGroup.getReviewee(), reviewGroup.getProjectName(), sectionResponses
    );
}

@Kimprodp
Copy link
Contributor

@donghoony 요거 템플릿 쪽 리팩터링하면서 리뷰 수정부분까지 조금 적용해본게 있는데 거의 다 해서 조금 이따가 PR 올려볼게요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants