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

[step4] 블랙잭 (베팅) & step3 코드리뷰 반영 #812

Open
wants to merge 32 commits into
base: sarahan774
Choose a base branch
from

Conversation

SaraHan774
Copy link

리뷰 감사드립니다.

…kJackResultManager 의 생성자로 주입하지 않도록 수정.
Copy link

@pci2676 pci2676 left a comment

Choose a reason for hiding this comment

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

조금만 더 고민해보면 좋을 부분에 리뷰를 남겨두었으니 확인해주세요~

Comment on lines 36 to 44
private fun getBetMoneyFromGameResult(gameResult: GameResult): BigDecimal {
return when (gameResult) {
GameResult.BLACK_JACK -> betMoney.getAmountOnBlackJack()
GameResult.WIN -> betMoney.getOriginalBetAmount()
GameResult.PUSH -> betMoney.getOriginalBetAmount()
GameResult.LOSE -> betMoney.getAmountOnLose()
GameResult.BUST -> betMoney.getAmountOnBust()
}
}
Copy link

Choose a reason for hiding this comment

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

이 부분은 GameResult에 따라 betMoney를 어떻게 다루어야하는지에 대한 전략을 다루는것 같습니다.

이 부분을 GameResult에게 위임해보면 어떨까요?

Copy link
Author

Choose a reason for hiding this comment

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

GameResult 가 가져가도록 수정했습니다.

Comment on lines +10 to +14
val isBlackJackInitially: Boolean

init {
repeat(initialCardCount) { addCard(drawCard()) }
repeat(INITIAL_CARD_COUNT) { addCard(drawCard()) }
isBlackJackInitially = cardsSum == Card.MAX_SUM
Copy link

Choose a reason for hiding this comment

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

여러가지 상태를 관리하는것 같습니다.

Cards를 가지고 점수를 계산하고 이러한 상태가 관리되는것 같은데요

디자인 패턴중 상태패턴을 이용한다면 이러한 부분을 개선해볼 수 있을것 같습니다.

반드시 개선을 바라는 부분은 아니니 참고만 해주셔도 좋습니다. 😄

Copy link
Author

Choose a reason for hiding this comment

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

@pci2676 요거 혹시 간단하게 예시를 주실 수 있을까요?

Copy link
Author

Choose a reason for hiding this comment

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

블랙잭 피드백에 나와있는 내용이군요!
이거 근데 현재 구조에서 적용하려면 코드를 아예 새로 짜야 할 것 같아서
별도로 한번 적용 해보는 연습을 해봐야 할 것 같습니다.

Copy link

Choose a reason for hiding this comment

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

제가 드리는 리뷰를 반드시 반영할 필요는 없으니 참고만 해주셔도 됩니다~

Comment on lines 31 to 34
fun setProfitMoneyFromGameResult(result: GameResult) {
val betMoney = getBetMoneyFromGameResult(result)
profitMoney.set(betMoney)
}
Copy link

Choose a reason for hiding this comment

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

이러한 상태를 변경하는 메서드는 설계하기 굉장히 까다로운 부분인것 같습니다.

가희님은 이 메서드를 의도와 시기에 맞게 잘 호출하여 사용할 수 있지만

다른 개발자는 이 메서드를 적절한 시기에 올바르게 호출하여 사용할 수 있도록 보장할 수 있을까요?

다른 방법으로 result만 구해낸다면 언제 어떻게든 호출할 수 있지 않을까요?

이를 방어할 수 있다면 더욱 견고해질 수 있을것 같습니다.

Copy link
Author

Choose a reason for hiding this comment

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

안그래도 암시적으로 상태 변경하는 부분이 걸렸는데,
이거 좀 더 고민해보겠습니다

Copy link
Author

Choose a reason for hiding this comment

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

profitMoney 를 Player private 하게 가져가도록 하고 setter 함수를 제거하는 방향으로 수정했습니다.

@@ -1,15 +1,17 @@
package blackjack.domain

class PlayerResultCalculator {
@Deprecated("deprecated - step3 에서만 사용됨")
Copy link

Choose a reason for hiding this comment

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

step3에서만 사용되었다면 제거해주셔도 좋을것 같습니다. 😄

Copy link
Author

Choose a reason for hiding this comment

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

제거했습니다 :)

Copy link

@pci2676 pci2676 left a comment

Choose a reason for hiding this comment

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

한번 참고해보면 좋을 부분에 리뷰를 남겨두었으니 확인해주세요~

Comment on lines +5 to +15
class ProfitMoney {
private var current: BigDecimal = BigDecimal.ZERO

fun getCurrentProfit(): BigDecimal {
return current
}

fun set(amount: BigDecimal) {
current = amount
}
}
Copy link

Choose a reason for hiding this comment

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

kotlin을 사용하신다면 가능한 불변한 객체를 설계하여 사용하시는것을 권장드립니다~

https://kotlinlang.org/docs/coding-conventions.html#idiomatic-use-of-language-features

Comment on lines +13 to +16
isPlayerBlackJackInitially: Boolean,
isDealerBlackJackInitially: Boolean,
dealerCardSum: Int,
playerCardSum: Int,
Copy link

Choose a reason for hiding this comment

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

4개의 파라미터를 다루어야 하는 부분은 부담으로 다가올 수 있을것 같습니다.

4개의 파라미터가 타입도 2개씩 동일하여 순서를 잘못 지켜 주입한다면 의도치 않게 동작할 수도 있을것 같네요!

이러한 값을 추상화하여 표현해볼 수 없을지 한번 고민해보시면 좋을것 같습니다.

Comment on lines +11 to +15
BLACK_JACK -> getAmountOnBlackJack()
WIN -> getOriginalBetAmount()
PUSH -> getOriginalBetAmount()
LOSE -> getAmountOnLose()
BUST -> getAmountOnBust()
Copy link

Choose a reason for hiding this comment

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

이러한 연관관계를 GameResult의 멤버변수로 표현해보는 방향은 어떻게 생각하시나요?

GameResult(val amountStrategy: (BetMoney -> BigDecimal))

Comment on lines +10 to +14
val isBlackJackInitially: Boolean

init {
repeat(initialCardCount) { addCard(drawCard()) }
repeat(INITIAL_CARD_COUNT) { addCard(drawCard()) }
isBlackJackInitially = cardsSum == Card.MAX_SUM
Copy link

Choose a reason for hiding this comment

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

제가 드리는 리뷰를 반드시 반영할 필요는 없으니 참고만 해주셔도 됩니다~

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

Successfully merging this pull request may close these issues.

2 participants