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

[BMO] 회원가입: MVC 역할 분리, Delegate 역할 재정의 #25

Open
wants to merge 18 commits into
base: BMO
Choose a base branch
from

Conversation

BMO5
Copy link

@BMO5 BMO5 commented Apr 5, 2021

작업 목록

  • 모든 항목이 조건에 부합하면 버튼 활성화
  • URLSession
  • TextField와 TextFieldDelegate 분리
  • Delegate에서 이벤트를 컨트롤러에 넘기기 위해 closure 사용
  • 이벤트별 UseCase작성
  • Notification을 통한 뷰 업데이트

학습키워드

  • TextFieldDelegate
  • MVC 흐름별 역할 분담

고민과 해결

  1. TextFieldDelegate에 입력을 판단하는 객체 분리
    • 예전 코드에는 TextField와 TextFieldDelegate를 모두 채택받는 객체에다가, 입력이 아이디나 비밀번호 조건에 부합하는지 판단하는 로직이 함께 있었습니다. 첫번째 PR을 보낸 후, 피드백을 받아 입력을 판단하는 로직을 Delegate 내의 하위타입으로 분리했었습니다. 그러다 멤버들의 피드백을 통해 Delegate 메소드에선 입력이 됐다는 것을 알려주는 용도가 적당하다는 것을 알게되어 구조를 컨트롤러에 이벤트만 전달하도록 다시 변경했습니다.
  2. 클로저를 통해 Delegate와 ViewController 연결
    • Delegate 메소드에서 컨트롤러에게 text를 전달하는 방법에 대해 어떻게 해야할지 매우 많이 고민했던 것 같습니다. 예전 강의의 Clean Architecture 흐름을 보면 Control과 Controller 사이에 Delegate를 통해 진행이 되는데, Controller가 Delegate를 포함하지 않고 Delegate 메소드에 접근하는 방법이 도통 생각이 나지 않았습니다. 그냥 ViewController가 Delegate를 채택해서 메소드가 실행될 때마다 다른 타입으로 Text를 넘겨줄까도 고민했습니다. 그러다 클로저에 대해 알게되었고, 이를 구현하는 방법에 대해서 멤버들과 의견을 공유하다가 escaping을 알게되어 Delegate 메소드가 실행될 때마다 Text를 컨트롤러로 넘겨주도록 했습니다.

질문거리

UseCase를 잘 이해한건지 궁금합니다. 예전 강의에서 사용자가 어떤 것을 눌렀을 때, 뭘 할 것인지 결정해놓는 시나리오 같은 것으로 자판기 앱에서는 자판기에 돈을 넣는다 까지가 UseCase라고 하셨던게 기억이 납니다. 저의 경우 idTextField를 눌러서 text를 입력할 때, 뷰 컨트롤러에서는 id를 검증하는 곳으로 text를 보내고 password TextField를 입력할 때는 password를 검증하는 곳으로 text를 보냅니다. 이런 시나리오를 UseCase라고 생각하는데 제가 잘 이해한게 맞을까요?

어제 저녁까지 PR을 보내려고 했지만, 다 끝내니 너무 늦어 PR보내기 죄송해 아침에 일어나 보냅니다...😿

BMO5 added 18 commits April 1, 2021 17:12
idTextField, idTextFieldDelegate 를 같이 상속, 채택받던 객체를
TextFieldDelegate만 채택하도록 분리
Delegate에서는 Validater라는 하위 모델에서 텍스트 판단을 하도록 변경
idTextField 커밋과 동
idTextFieldDelegate 이유와 동
idTextFieldDelegate 이유와 동
기존의 분리 안된 객체 파일 삭제
유저가 입력한 정보가 valid한지 알 수 있는 메소드를 가진 프로토콜 생성
버튼 활성화를 하기위해 사용
기존의 딕셔너리 구조에서
UserInfoValidable 프로토콜을 채택한 타입의 배열로 변경
Next를 누르면 다음 TextField로 가게끔.
name에서 Valid인 경우 UserInfo를 넣지 않았는데,
이때문에 guard 문에서 걸려서 리턴되던 것 수정
폴더 생성 등
폴더 생성 등
NameTextField에서 엔터만 누르면 다음 화면으로 갔던 것 수정
클로저를 넘겨줄 타입
넘어온 정보를 판단하는 객체
Text들의 State를 알기 위한 Validable 프로토콜 추가
State를 확인하고 버튼의 Enable 여부 결정
구조 바꾸기 전 파일들, 타입 이름 등
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