우테코 5기/레벨1

View단에서 도메인 객체를 생성해 return하는게 좋을까, 아니면 입력값을 그대로 return하는게 좋을까?

도둑탈을 쓴 애쉬 2023. 2. 17. 14:13

프리코스때는 다음과 같이 InputView에서 도메인을 생성해 return해주었다.

// InputView.java
public List<Coach> readCoaches() {
        List<String> coachNames = readWordsSeparatedByComma();
        validateCoach(coachNames);
        return convertToCoach(coachNames);
    }

하지만 View에서 Domain을 생성까지 담당하면, InputView의 책임이 너무 커지는 것 같았다.

따라서 이번 미션에서는 InputView는 문자열 및 원시값을 전달해주는 역할만을 하도록했다.

Domain으로 바꿔주는 것은 Controller의 책임이라 생각했다.

다만, “a,b,c”List.of(a,b,c); 문자열 파싱해주는 것은 InputView의 책임이라 생각해서 이정도의 가공만 뷰에서 해주었다.

그렇게 생각한 이유는, 기존에는 이름들을 , 를 기준으로 분리해서 입력받았는데, 구분자가 / 로 변경되었다고 가정해보자.

이는 입력을 받는 형식, 즉 InputView에서의 변화인데 파싱을 다른 곳에서 진행하면 그 곳까지 변화의 영향을 받는다.

따라서 입력 형식에 따라 유동적인 것들은 InputView에서 담당했다.

// InputView.java
public List<String> readCarNames() {
        final String DELIMITER = ",";

        printInputMessage(ENTER_CAR_NAMES);
        String input = readLine();
        validateNotEmpty(input);
        return splitWordsBy(input, DELIMITER);
    }