도커 설치

체스 미션을 진행하기 위해 도커를 깔아야 한다.
도커 공식 홈페이지에서 Windows용 Docker desktop을 설치했으나 다음과 같은 화면에서 넘어가지를 않는다...

wsl을 재설치 하라는 문구가 떠서 cmd 창에서 wsl --update같은 명령어를 쳐봤지만 이미 최신 버전이라고 나온다.

그래서 wsl 문제는 아니라고 생각했지만 이는 거짓말이었다. 패키지 파일로 다운받으니까 해결되었다.

wsl 설치 링크

도와준분들 감사합니다.

누구의 책임인가

블랙잭 미션에서 컨트롤러를 구현하는 도중 도메인과 뷰과 혼합된 로직이 필요했다.

이를 위해 컨트롤러에서 객체를 꺼내와서 로직을 실행하는 것이 맞나? 라는 생각이 들었다.

1. 도메인의 책임

처음에는 도메인에서 뷰의 메서드를 함수형 인터페이스로 받아와서 도메인 내에서 뷰의 메서드를 실행하도록 했다.

private boolean hitByCondition(Consumer<PlayerInfoDto> outputPlayer, Function<String, String> inputCommand, Deck deck) {
    HitCommand hitCommand = HitCommand.findCommand(inputCommand.apply(playerName.getValue()));
    if (hitCommand == HitCommand.N) {
        return false;
    }

    draw(deck.serve());
    outputPlayer.accept(PlayerInfoDto.from(this));

    return isBust();
}

처음에는 도메인에서 뷰가 실행되기는 하지만, 도메인은 뷰의 로직을 알지 못하기 때문에 상관이 없다고 생각했다.

하지만, 잘 생각해보면 도메인이 뷰에서 필요한 파라미터를 직접 넣어주고 있다.

즉, 뷰가 변경되면 도메인도 변경해야 한다. 도메인이 뷰를 작게나마 의존하고 있다는 뜻이다.

따라서 도메인의 책임은 아니다.

좋은 방법은 아니라고 생각했고, 그렇다면 뷰에서 도메인을 받아와 실행해야 하나? 라는 생각이 들었다.

이것도 뷰가 도메인을 알아야 하기 때문에 그다지 좋은 방법은 아닌 것 같다.

컨트롤러가 왜 있는지 다시 생각해보자.

컨트롤러는 뷰와 도메인을 의존하면서 뷰와 도메인이 독립적으로 존재하도록 도와준다.

(오레오 사이의 크림이 컨트롤러이고, 양쪽 쿠키가 뷰와 도메인이다)

컨트롤러에서 필요하다면 도메인 객체를 꺼내와서 다른 부수 효과가 일어나는 행위만 하지 않으면 괜찮다고 생각한다.

2. 컨트롤러의 책임

수정한 코드에서는 blackjackGame에서 player를 꺼내와서 player에 대한 로직이 실행된다.

private void hitOrStay(final Player player) {
    Command command = inputView.inputCardCommand(player.name());
    if (command == Command.Y) {
        blackjackGame.hitPlayer(player.name());
    } else if (command == Command.N) {
        blackjackGame.stayPlayer(player.name());
    }
}

player를 꺼내와서 사용하긴 했지만 player의 부수 효과가 일어나는 행위는 하지 않는다.

데이터를 꺼내와서 조회만 하는 name() 메서드만 사용하고 있다.


결론

뷰와 도메인의 혼합된 로직은 컨트롤러의 책임이다.

'회고 > 우아한테크코스' 카테고리의 다른 글

2023.03.15 일일 회고  (0) 2023.03.16
2023.03.14 일일 회고  (0) 2023.03.15
2023.03.09 일일 회고  (0) 2023.03.10
2023.03.08 일일 회고  (0) 2023.03.09
2023.03.07 일일 회고  (1) 2023.03.07

+ Recent posts