Conversation
|
|
테스트코드를 작성하는것에 팁을 물어보신거라면 답변드릴게요 😄 하지만, 테스트코드를 나중에 작성하다보면 결국 테스트하기 힘든구조가 필연적으로 발생하더라구요.. 😭 |
mskangg
left a comment
There was a problem hiding this comment.
3단계도 잘 구현해주셨네요! 👏
몇가지 코멘트 남겨드렸어요! 그리고 구현로직에 비해 테스트가 적은것 같아요 😅
예외케이스도 몇가지 추가하여 보완하면 좋을것 같습니다!
그럼 화이팅 🔥
| [] 사다리 게임에 참여하는 사람에 이름을 부여할 수 있다. | ||
| [] 이름은 최대 5글자로 제한된다. | ||
| [] 사람의 이름은 띄어쓰기가 존재하지 않는 쉼표로 구분한다. | ||
| [] 사다리의 모양은 |-----|으로 출력된다. | ||
| [] 사다리를 출력할 때 사람 이름도 같이 출력한다. | ||
| [] 참여하는 사람의 숫자에 따라 사다리의 폭과 사다리의 개수가 달라진다. | ||
| [] |-----|-----| 같이 연속적인 사다리는 가능하지 않다. | ||
| [] 하나의 라인에는 최소 하나 이상이 사다리가 존재하며 사다리의 개수는 랜덤하다. |
| private Lines createLines(LadderRequest request) { | ||
| Lines lines = new Lines(); | ||
| int rowLineNumber = request.getParticipants().length - 1; | ||
| IntStream.range(0, request.getHighCount()) | ||
| .forEach(index -> lines.addLine(new Line(rowLineNumber))); | ||
| return lines; |
There was a problem hiding this comment.
request 에서 도메인 객체를 만들어줄수도 있지 않을까요? 🤔
request.toLines()
개인적으로 dto는 로직이 들어가지 않는 transfer 객체지만, dto 가 갖고있는 상태변수만을 가지고 domain을 만들수 있다면 dto에서 생성해주는 편이에요!
이 부분은 정답이 없으니 상권님이 고민해봐주세요!
| rowLineNumber = participantNumber - 1; | ||
| rowLinePosition = RowLinePositions.create(rowLineNumber); | ||
| } | ||
|
|
||
| public Line(int rowLineNumber) { | ||
| this.rowLineNumber = rowLineNumber; | ||
| rowLinePosition = RowLinePositions.create(rowLineNumber); | ||
| } | ||
|
|
||
| public Line(int rowLineNumber, RowLinePositions rowLinePositions) { | ||
| this.rowLineNumber = rowLineNumber; | ||
| this.rowLinePosition = rowLinePositions; |
There was a problem hiding this comment.
생성자를 여러개 사용중이네요 👍
이런 경우 주생성자 부생성자를 나누어 사용하는게 좋습니다 :)
관련링크 남겨드리겠습니다
https://velog.io/@injoon2019/%EC%A3%BC-%EC%83%9D%EC%84%B1%EC%9E%90-%EB%B6%80-%EC%83%9D%EC%84%B1%EC%9E%90
| public void movableParticipants(Participants participants) { | ||
| participants.getParticipantList() | ||
| .stream() | ||
| .forEachOrdered(participant -> movableParticipant(participant)); | ||
| } |
There was a problem hiding this comment.
값을 꺼내와서 비즈니스를 처리하고 있네요!
getter를 사용하지 않고 메세지를 보내는 방식으로 처리하는건 어떤가요? 🤔
|
|
||
| public void moveParticipants(Participants participants) { | ||
| lineList.stream() | ||
| .forEachOrdered(line -> line.movableParticipants(participants)); |
There was a problem hiding this comment.
메서드명이 boolean을 리턴할것 같은데 void 형식이군요!
간단하게 line.move(participants) 로 하는건 어떠신가요?
| public RowLinePositions(List<Boolean> positionList, int rowLineNumber) { | ||
| this.positionList = positionList; | ||
| this.rowLineNumber = rowLineNumber; |
There was a problem hiding this comment.
생성자에선 필수값체크정도 하는게 좋아보여요!
컬렉션 빈값이나 음수값체크정도해서 방어하는게 좋아보여요 🙂
안녕하세요~ 3단계 진행하여 PR 생성합니다.
rowLineNumber는 -----, ----- ...의 개수를 의미해서 참고 하시면 좋을 것 같습니다!
이번 미션을 진행하면서 테스트 코드 작성을 많이 못했네요ㅠㅠ 테스트 코드도 빠르게 개발하기 위해서 어느정도의 테스트 코드 베이스를 만들어야 한다고 생각하는데 주로 리뷰어께서는 주로 어떤 방식을 사용하시는지 궁금합니다!