-
Notifications
You must be signed in to change notification settings - Fork 7
Conversation
- lombok 변경 -> chaining 추가 -> `@Setter`, `@Getter` 대신 `@Data`로 변경(DTO) - Social DTO Contructor 추가 - 주석 추가
- service layer - rest controller layer - 테스트는 미실시
- Entity <-> DTO를 위한 converter 추가 - DTO에 builder pattern 적용(effective java 참조) - domain의 NoArgsConstructor의 access level 수정(public -> protected)
- method name 수정 - method name을entity에 맞게 찾지 못해 exception
- null check 변경 -> Objects.isNull로 - test 추가 -> domain util Dto Converter - 주석 추가
- Member - Social Relation이 잘못되어 있었던 것 수정 -> mappedBy seq에서 member 로 수정
- refactor : Transactional 이동 / Member에서 SocialList empty List로 처리 / Social에서 ManyToOne의 fetch를 EAGER(default)로 수정 / Social의 FK인 member_seq를 FK update 막음 등 - test : test 코드 작성 - feature : MemberDto의 SocialList를 추가와 add할 수 있게 처리 / List 처리할 수 있게 EntityDtoConverter 처리 등
리뷰 부탁드립니다 수정해야 될 부분이 꽤 많을 것으로 보여집니다 특히 등이 중점이 될 것 같습니다. 1은 Converter가 2,3은 relation의 fetch type이 .. 아무쪼록 리뷰 부탁드립니다 :) |
좋네요 낼부터 차근히 리뷰해보죠 👍 |
@changhwa 커밋하기까지 기간도 있고 해서 좀 지저분해 보이긴 하네요 :) |
원래 원칙은 1풀리퀘는 1커밋으로 하는게 좋습니다. 1커밋이 중요한 이유는 커밋이 여러개인 경우 위의커밋을 리뷰했는데 아래커밋에서 바껴있거나 이러면 혼란스러우니까요..^^
|
@changhwa |
SocialServiceIntegrationTest#delete_social 테스트에서 익셉션 관련 테스트는 |
@reiphiel 감사합니다 expected 사용해서 수정해서 다시 commit 하겠습니다 |
- try - catch 대신 Test의 expected 사용
@reiphiel 수정하였습니다. |
convert가 너무 많아서 헷갈리네요 |
@changhwa |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
4e30c63 요 커밋은 메세지가 어떤걸 의미하는지 잘 모르겠네요.
@@ -31,7 +34,7 @@ | |||
List<Member> member = memberRepository.findAll(); | |||
|
|||
return member.stream() | |||
.map(m -> new MemberDto(m.getSeq(), m.getId(), m.getPassword(), m.getEmail(), m.getNickName(), m.getRegistrationDate(), m.getPoint())) | |||
.map(m -> EntityDtoConverter.memberConvertToDto(m)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 EntityDtoConvert 라는 걸 만드는것 보다는 modelmapper 또는 해당 도메인에 직접 구현하는게 맞지 않을까 싶습니다.
.build(); | ||
|
||
|
||
System.out.println(dto); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
개인적으로는 테스트코드는 항상 assert 구문으로 끝나는게 좋다고 생각합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
한 번 확인해본다고 해놨는데
일관성 있게 assert로 처리하겠습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
e197892 에서 assert로 다 수정하고 sysout 삭제했습니다
@@ -68,7 +68,7 @@ public void setUp() { | |||
|
|||
@Test | |||
public void 멤버_업데이트_update_member() throws Exception { | |||
MemberDto memberDto = new MemberDto("id", "password", "[email protected]", "닉네임"); | |||
MemberDto memberDto = new MemberDto.Builder().id("id").password("password").email("[email protected]").nickName("닉네임").build(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
빌더 패턴을 적용했으면 장점을 활용해야합니다.
이런경우는 @before 에 기본데이터를 필요해주고 필요한 경우에만 추가로 변경해서 build 해주면 됩니다.
@@ -11,6 +11,6 @@ | |||
*/ | |||
@Repository | |||
public interface MemberRepository extends JpaRepository<Member, Long> { | |||
Member findByNickName(String nickname); | |||
Member findByEmail(String email); | |||
Member findByNickName(final String nickname); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
final 을 넣으신 이유가 있나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 필요없으려나요?
혹시 몰라서 final로 만들어서 변경못하게 하려고 했는데..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
일반적으로 Method 파라미터에는 final 은 선언해서 사용하면 실수에 의한 재 대입을 막을 수 있어서 좋은 패턴인데 인터페이스의 메소드는 파라미터를 사용하는 부분이 없어서 의미가 없긴합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 필요없군요
삭제하겠습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 삭제를 따로 할 필요도 없어 보입니다^^;; 바이트 코드가 미세하게 증가할려나;; 그건 class파일을 봐봐야 할 것 같고 저는 습관적으로 붙이는 편이라 가끔 인터페이스에도 붙이기도 합니다.
메소드 파라미터에 final을 붙이는 것 자체는 굉장히 좋은 습관입니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
통일성을 위해서 삭제를 하든지 추가를 하든지 해야될 것 같아서요 ..
final을 파라미터에 붙이는 건 습관을 들이도록 노력해야겠습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
두 method 모두 final로 처리되어 있어서 그대로 놔두겠습니다
Member findByNickName(final String nickname);
Member findByEmail(final String email);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
일단 깃허브로 커밋을 대충 훑어본것만 적었구요 주말에 시간될때 한커밋씩 자세히 봐볼게요.
@@ -61,12 +61,9 @@ public SocialDto getSocial(@NotNull final Long socialSequence) { | |||
*/ | |||
@Transactional | |||
public SocialDto createSocial(@NotNull final SocialDto socialDto) { | |||
if(socialDto.getMemberSequence() == null) | |||
throw new NullPointerException(); | |||
Member foundMember = memberRepository.findOne(Objects.requireNonNull(socialDto.getMemberSequence())); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
만약 Objects.requireNonNull이 널로 넘어오면 어떤식으로 동작하게 되나요?
@@ -85,8 +82,7 @@ public SocialDto createSocial(@NotNull final SocialDto socialDto) { | |||
*/ | |||
@Transactional | |||
public SocialDto updateSocial(@NotNull final SocialDto socialDto) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요거 제대로 동작하나요?
null 넘기는 테스트가 있을까요?
@RunWith(SpringRunner.class) | ||
@SpringBootTest | ||
@ActiveProfiles(value = "test") | ||
public class EntityDtoConverterIntegrationTest { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요건 의도하신바는 알겠는데 만약 요기능을 제대로 만들고 싶었더라면 종속되지 않도록 만들면 될듯한데
이미 modelmapper가 있으니 ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 테스트는 삭제했어요 e197892 에서 비워뒀어요
나중에 Converter를 없앨 때 같이 삭제할 예정이에요
@@ -67,7 +66,7 @@ | |||
/* | |||
* social은 member에 종속적이므로 cascade | |||
*/ | |||
@OneToMany(fetch = FetchType.EAGER, mappedBy = "seq") | |||
@OneToMany |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요렇게 하는것도 나쁘진 않지만 가능하면 이게 어떤어떤 동작을 하게 되는지는 적어주는 편이 좋습니다.
@ManyToOne(optional = false, fetch = FetchType.LAZY) | ||
@JoinColumn(name = "MEMBER_SEQ") | ||
/** | ||
* Transactional 범위밖에서 벗어나서 LAZY에서 EAGER(default)로 수정 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lazy를 써야하는 순간이 어느순간인지 고민해보면 좋을거같네요.
- 테스트코드에서 sysout 삭제 - assert로 통일 - EntityDtoConvert Test empty 처리
* @param socialSequence | ||
* @return SocialDto | ||
*/ | ||
public SocialDto getSocial(@NotNull final Long socialSequence) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@NotNull이라고 붙여놓았는데, 이게 실제로 동작하는건가요??
제가 기억하기로는 별도의 preProcessor가 있어야지만 동작하는걸로 알고 있어서요./
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
한 번 확인해보겠습니다
저도 저건 처음 써봤는데 막연하게 동작할 거다
라고 생각하고 말았네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
validator lib
같은 게 별도로 있어야지 동작하나보네요.
혼자선 아무것도 못하나봅니다.
제외하든지 @Vaild
등을 사용하든지 하겠습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@NotNull
을 삭제하고
Objects.requireNonNull
로 대체했습니다.
dc15595
- \'@NotNull\' 삭제 - Objects.requireNonNull로 대체
머지 해도 되지 않을까요? |
Commit history
@Setter
,@Getter
대신@Data
로 변경(DTO)코드에 대한 전반적인 리뷰가 필요
특히, EntityDtoConverter 같은 경우가 특히 요망
또한
@Transactional
안에서 사용되어야Exception
이 발생하지 않는fetch = FetchType.EAGER
로 default가 되어 있는데Social
과Member
의 각 relation에서fetch=FetchType.LAZY
로 한다면처리를 어떻게 해야 할지 등의 리뷰가 요망됨.