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

Add(.footprint) : 발자취 도메인 엔티티 분리 및 매핑 #178

Merged
merged 27 commits into from
Feb 24, 2024

Conversation

JuwoongKim
Copy link
Member

@JuwoongKim JuwoongKim commented Feb 14, 2024

🔍 어떤 PR인가요?

  • 발자취 도메인에서 도메인 객체와 jpa 객체 분리 작업을 수행했습니다.
  • 도메인 객체와 jpa 객체 매핑 작업을 수행했습니다.
  • 생성, 조회 port 및 adaptor를 생성하여 매핑 과정을 테스트 했습니다.

😋 To Reviewer

  • 상속 구조에 대한 DB 테이블 생성 전략은 구분자를 사용한 단일 테이블 전략을 사용했습니다.
    선택한 이유는 가장 간단했고, 발자취 유형이 한정되어 테이블의 크기가 크지 않아 조회 성능에 부정적이지 않다고 생각했기 때문입니다.
    선택 시 참고한 자료

  • 매핑 과정에서 반드시 컬럼이 필요하기 때문에 유형별로 매핑을 만들었습니다.
    다만 공통부분은 재 사용할 수 있도록 처리했습니다.

  • 엔티티에서 아자자, 태그 부분은 ElementTable을 사용해 별도의 관계테이블을 만들었습니다.
    조회시 별도의 쿼리를 작성하기 보단 jpa를 통해 같이 가져 올 수 있는게 간단하다고 판단했기 때문입니다.

  • 생성 시 유형 분리에 대한 책임을 port에 주었습니다. 적절한지 모르겠지만 현재 상황에선 최선이었습니다.
    또한 분기처리 코드가 별로입니다.
    혹시 가능하다면 17 preview 기능을 허용해 swtich 패턴매핑을 사용해서 개선할 수 있을 것 같습니다. 해도 될까요?
    심지어 instanceOf로 타입캐스팅도 안되더라고요... 제가 잘못한건지.. 암튼 이부분좀 잘 봐주세요.

✅ 작성한 테스트

매핑 구현에 대한 테스트만 진행했습니다.
또한 제가 킹받게 픽스쳐 몽키 해당 클래스에서 빌드 해놨는데, 전체 논의 후에 따로 분리하도록 하겠습니다. 덜 킹받아주세요...

  • create_FreeFootprint_Success
  • create_KptFootprint_Success
  • get_FreeFootprint_Success
  • get_KptFootprint_Success

@JuwoongKim JuwoongKim self-assigned this Feb 14, 2024
@JuwoongKim JuwoongKim added the enhancement New feature or request label Feb 14, 2024
Copy link
Member

@kys0411 kys0411 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주웅님 고생하셨습니다ㅎㅎ

Copy link
Member

@Hejow Hejow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

구두로 말씀드린 내용과 함께 개선해보면 좋을 것 같습니다!
고민하시느라 고생 많으셨어요 ㅎㅎ

@Hejow Hejow self-requested a review February 15, 2024 08:54
@JuwoongKim JuwoongKim force-pushed the jpa-footprint branch 2 times, most recently from 436ad24 to dbdcf59 Compare February 17, 2024 07:02
Copy link

Test Coverage Report

Overall Project 78.87% -3.13% 🍏
Files changed 30.38%

File Coverage
FreeFootprint.java 100% 🍏
KptFootprint.java 100% 🍏
CreateFootprintAdaptor.java 100% 🍏
FootprintFactory.java 91.43% -8.57%
FootprintParam.java 83.33% 🍏
Ajaja.java 77.54% -5.07%
FootprintMapper.java 37.72% -62.28%
GetFootprintAdaptor.java 0%
TargetEntity.java 0%
WriterEntity.java 0%

Copy link

Test Coverage Report

Overall Project 81.31% -0.85% 🍏
Files changed 81.15% 🍏

File Coverage
FreeFootprint.java 100% 🍏
KptFootprint.java 100% 🍏
CreateFootprintAdaptor.java 100% 🍏
TargetEntity.java 100% 🍏
WriterEntity.java 100% 🍏
GetFootprintAdaptor.java 95.12% -4.88% 🍏
FootprintFactory.java 91.43% -8.57%
FootprintParam.java 83.33% 🍏
Ajaja.java 77.54% -5.07%
FootprintMapper.java 69.3% -30.7% 🍏

@JuwoongKim
Copy link
Member Author

JuwoongKim commented Feb 17, 2024

PR 수정 사항을 정리해서 말씀드려요.

  1. 구현체 별로 매퍼를 만들어 생성했던 것을 하나의 매퍼와 하나의 메서드로 통일했습니다.
    매퍼 자체에서 타입에 따라 분기처리하도록 했습니다.

 

  1. 발자취와 아좌좌의 도메인, 엔티티 연관성을 모두 제거했습니다.
    이유는 발자취에서 아좌좌 개수 조회 외에 기능이 없고 아좌좌 도메인이 별도로 존재해서 생성 삭제가 가능하기 때문입니다.
    기존 방식을 최대한 유지했습니다.
    다만 추후 아좌좌가 발자취 도메인에서 기능을 가져야한다면 도메인 객체를 직접 참조하고, 엔티티도 연관관계를 맺을 예정입니다.
스크린샷 2024-02-17 오후 5 01 41

 

  1. 발자취와 태그의 도메인, 엔티티 연관성을 모두 제거했습니다.
    아좌좌와 다르게 중간테이블을 가지는 것을 제외하고 동일합니다.
    이유도 아좌좌와 동일합니다.
스크린샷 2024-02-17 오후 5 05 18

 

  1. 2와 3을 고려하면서 하나의 도메인이 독립적으로 존재하고 여러 도메인에서 사용하면서 관계를 어떻게 표현할지가 고민이였습니다.
    현재는 참조하는 도메인의 서비스를 통해 연관된 것들을 처리하고 있지만 좋은 것인가 라는 생각이 들었습니다.
    내린 결론은 연관된 도메인이 데이터로써만 필요하고 도메인 객체로써 기능이 필요없다면 지금방식도 좋은 것 같습니다.
    다만 저희가 가진 모듈이 어떤 기준인지, 도메인은 어때야햐는지, 다른 도메인 의존을 어떻게 할 것 인지는 게속 이야기해서 좋은 쪽으로 기준을 정하는 것도 좋을 것 같습니다.

 

  1. 번 째는 도메인과 엔티티 사이의 매핑 방식입니다.
    크기를 기준으로 여러가지 경우의 수가 있습니다.
    저는 2 또는 4와 같이 도메인 객체가 엔티티 객체보다 큰 상황이였습니다. (Writer, Target)
    4의 방식을 사용해 관련 도메인의 테이블에서 데이터를 매핑할 엔티티를 만들고 매핑해주었습니다.
    엔티티가 테이블 하나에 대응해야하는지, 필요에 따른 매핑 객체인지 등 엔티티를 어떻게 가져갈것인지 이야기해보는 것도 좋을 것 같습니다.
스크린샷 2024-02-17 오후 5 32 15

Copy link
Member

@Hejow Hejow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

많은 고민이 느껴져서 좋았습니다!
프로젝트 중간에 들어오셔서 기술에 대한 고민을 좀 더 해보면 좋겠다? 라는 생각이 들었던 것 같아요 ㅎㅎ 저랑 많은 이야기를 해보죠!

그리고 리뷰에 대한 피드백은 부탁드립니다 ㅋㅋ resolve할 수 있게!!

Copy link

Test Coverage Report

Overall Project 80.47% -1.75% 🍏
Files changed 75.36% 🍏

File Coverage
Footprint.java 100% 🍏
FreeFootprint.java 100% 🍏
GetFootprintAdaptor.java 100% 🍏
CreateFootprintAdaptor.java 100% 🍏
FootprintFactory.java 91.84% -8.16% 🍏
FootprintParam.java 90.91% 🍏
Entity.java 85.71% -14.29% 🍏
Ajaja.java 77.54% -5.07%
FootprintMapper.java 57.63% -42.37%
KptFootprint.java 47.5% -52.5%
TargetEntity.java 0%
WriterEntity.java 0%

@JuwoongKim JuwoongKim closed this Feb 24, 2024
@JuwoongKim JuwoongKim reopened this Feb 24, 2024
Copy link

Test Coverage Report

Overall Project 80.47% -1.75% 🍏
Files changed 75.36% 🍏

File Coverage
Footprint.java 100% 🍏
FreeFootprint.java 100% 🍏
GetFootprintAdaptor.java 100% 🍏
CreateFootprintAdaptor.java 100% 🍏
FootprintFactory.java 91.84% -8.16% 🍏
FootprintParam.java 90.91% 🍏
Entity.java 85.71% -14.29% 🍏
Ajaja.java 77.54% -5.07%
FootprintMapper.java 57.63% -42.37%
KptFootprint.java 47.5% -52.5%
TargetEntity.java 0%
WriterEntity.java 0%

@Hejow Hejow enabled auto-merge February 24, 2024 11:24
@Hejow Hejow merged commit 25319ce into dev Feb 24, 2024
5 checks passed
@Hejow Hejow deleted the jpa-footprint branch February 24, 2024 11:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants