• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Editor를 쓰지 않는 방식을 만들어 봤습니다. 혹시 피드백 주실 수 있으신가요...?

22.09.09 17:51 작성 조회수 342

2

안녕하세요 호돌맨님. 강의 잘 보고 있습니다!

 

저도 처음에 볼 때 이해하기 힘들어서 수강생분들의 질문과 호돌맨님의 답변을 보며

해당 패턴을 사용하는 목적과 동작 방식을 이해할 수 있었습니다.

 

더 나아가서, '혹시 다른 방법은 없을까?' 고민하면서 만들어 봤습니다...

업무때문에 바쁘신 줄은 알지만, 나중에라도 보게 되신다면 피드백 부탁드리고 싶습니다ㅎㅎ

 


@Getter
@Entity
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    @Lob
    private String content;

    @Builder
    public Post(String title, String content) {
        this.title = title;
        this.content = content;
    }

    /**
     * 첫번째 방법
     *   - 문제1
     *     .title(postEdit.getTitle() != null ? postEdit.getTitle() : title)
     *     에서
     *     'postEdit.getTitle() != null' 을 어떤 개발자가 'postEdit.getContent() != null' 로 몰래 바꾼다면?
     *
     *   - 문제2
     *     가독성이 안 좋아서, 문제1의 경우에 원인을 빠르게 찾기도 힘듬
     */
    public void edit1(PostEdit postEdit) {
        PostEdit fixedPostEdit = PostEdit.builder()
                .title(postEdit.getTitle() != null ? postEdit.getTitle() : title)
                .content(postEdit.getContent() != null ? postEdit.getContent() : content)
                .build();

        title = fixedPostEdit.getTitle();
        content = fixedPostEdit.getContent();
    }

    /**
     * 두번째 방법
     *   - PostEditor의 방식처럼 원본 데이터(Post)의 값을 먼저 넣고,
     *     변경 데이터(PostEdit)의 값으로 덮어쓰는 방식
     *
     *     .title(title) 또는
     *     .title(postEdit.getTitle())
     *     처럼 키워드가(title, content, ...)가 바로 옆에 붙어있어서
     *     첫번째 방법보다 알아보기 쉬움
     *     -> 에러 발생 시, 문제 원인을 찾기 쉬움
     */
    public void edit2(PostEdit postEdit) {
        PostEdit.PostEditBuilder editBuilder = PostEdit.builder()
                .title(title)
                .content(content);

        PostEdit fixedPostEdit = editBuilder
                .title(postEdit.getTitle())
                .content(postEdit.getContent())
                .build();

        title = fixedPostEdit.getTitle();
        content = fixedPostEdit.getContent();
    }

}

 

답변 1

답변을 작성해보세요.

4

안녕하세요. 호돌맨입니다.
질문을 남겨주셔서 감사합니다.

좋은 코드 만들어주셔서 감사합니다.

1.

Post가 PostEdit까지 알고 있어야 하는가에 대해서 생각해볼 필요가 있습니다.
- Post를 수정하려면 서비스정책으로 만들어 둔 PostEdit까지 테스트 해야될 수 있습니다.
- 나중에 다른 애플리케이션 모듈이 추가된다면 해당 모듈은 Post만 참조하고 싶은데도 불구하고 PostEdit을 알아야 될 수 있습니다.
예를들어 admin 모듈이 추가된 상태에서 api, admin이 있다고 했을때 각 모듈에서 게시물을 수정하기 위해 Post.edit을 사용해야 한다면 api에서 쓰고 있는 PostEdit을 admin과 공유 해야될 수 있습니다.

2.

PostEditor로 만들어진 값을 PostEdit에 넣을 필요가 있는지 생각해보면 좋을것 같습니다.
현재는 Post와 PostEditor가 같은 영역에 위치해 있고 Post를 수정하려면 PostEditor를 통해서만 가능합니다.

관련영상

https://www.youtube.com/watch?v=RVO02Z1dLF8

PostEditor관련해서 보충 영상을 찍어야되나 생각중입니다.
혹시 잘 이해가 안되면 언제나 질문 주세요. 환영합니다.

감사합니다.