Skip to content

리팩토링 완료 ❤︎ #1

Open
jisu-om wants to merge 45 commits intoreviewfrom
refac
Open

리팩토링 완료 ❤︎ #1
jisu-om wants to merge 45 commits intoreviewfrom
refac

Conversation

@jisu-om
Copy link
Owner

@jisu-om jisu-om commented Nov 21, 2023

MainController 컨트롤러가 하는 일이 많아서 분량이 길어졌다. (뷰 와 모델 간 연결이 유독 많은 느낌)
라운드마다 UserNumber input 받아서 생성하고, 라운드결과 출력하고, 마지막에 재시작 여부도 묻고
➔ play(), wantsRestart() 기능을 GamePlayController, GameRestartController 객체가 하게 함
➔ 그러다보니 MainController는 InputView, OutputView 를 사용하지 않게 됨….

mainController 의 run() … 다른 로직 있을까?

RoundResult 가 너무 vo 스러웠다. 또 vo 는 아닌데,, 매우 수동적…
원래 ResultCalculator 가 있어서 거기서 라운드 결과를 계산하도록 했는데
그렇게 하니까 roundResult 에서 plusBallCount(), plusStrikeCount() 요런 것만 사용하게 되어서 RoundResult 가 매우 수동적이 됨.

➔ RoundResult 에게 라운드 결과 계산이라는 책임을 부여
RoundResult.create() 호출 시, ComputerNumber, UserNumber 를 인자로 받아서 라운드 결과 계산된 인스턴스를 생성하도록 함
프로그램이 간단하다 보니까 서비스로 만들기에는 클래스를 너무 세분화하는 느낌이 들었다. 매우 DDD 스러워짐 ?

Q) calculateBallAndStrike() 메서드… 인자가 3개….. 다른 방법 있을까? (UserNumber, ComputerNumber 가 더 일하게….).

ComputerNumber 가 객체가 될 수 있도록 findNumberByPosition 라는 책임을 부여함… 겨우 찾음…
…computerNumber.isNumberAtPosition(number, position) 요런 메서드 만들었다 지움
if (computerNumber.findNumberByPosition(position) == number) 이렇게 그냥 사용

ComputerNumber, UserNumber 의 역할, 책임이 비슷해서 BaseballNumber 라는 걸 상속받아서 처리해도 되겠다.
ComputerNumber 는 List 값이 자동으로 생성되고, UserNumber 는 추가 검증이 필요하고.

…r 생성, 반복문 사용하여 프로그램 돌아가도록 작성 Application.main() 작성
…환하며 게임의 흐름을 조절하는 내부 필드를 가져서 객체가 자율성을 갖기 위해) 굳이 싱글톤을 적용할 필요가 있었는지는 의문. utility class로 남겨놨어도 되었을 것 같음
…, playerNumber에서 userNumber로 이름 변경
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.

1 participant