저는 Swift와 함께 MVVM으로 지금 조금씩 작업하고 있습니다. 원리는 매우 간단하다 :MVVM & iOS - 누락 된 규칙
- 의 ViewController는보기 책임이있다;
- ViewModel은에 대한 책임은 모델입니다.
- ViewController은보기입니다.
- 의 ViewController는 뷰 모델을 소유;
- ViewModel;
기간.
그건 분명합니다. 그러나 거기에 나는 아직도 그것에 대해 가지고 몇 가지 질문입니다 (그들이 바보 같은 소리를 할 수는 있지만, 위의 규칙으로 초보자뿐만 명확하게하는 것이 중요) :
- 해야 뷰 모델은 비즈니스 로직에 대한 책임? ViewController는 모델을 소유하지 않기 때문에 ViewModel에 biz 로직을 배치하는 것이 옳다고 생각합니다.
- ViewModel은
struct
이어야합니까? 이것은 까다로운 것입니다. 나는 ViewModel이 ViewController에 대한 데이터와 상호 작용하는 API를 제공해야한다고 생각합니다. 따라서 비동기 데이터 (예 : HTTP 호출)를 가져 오기 위해 일부 escaping closures을 사용해야하는 경우가 있습니다. 구조체는 그것을 가질 수 없습니다. - ViewController에서 비 아웃렛 변수를 숨겨야합니까? 때때로보기를 표시하기 위해 일부 속성에 대한 강력한 참조가 필요합니다 (예 :
UIPageControl
의 현재 페이지 유지). ViewController는이 참조를 유지해야합니까? - ViewModel에서 ViewController 업데이트를 실행하려면 어떻게해야합니까? 나는 reactive programming에 대해 읽었지만 나의 질문은 더 넓다 : 가끔 ViewModel은 어떤 행동에 응답하기 위해 ViewController를 필요로 하는가? ViewController가 처리 할 수있는 특정 반응에 ViewModel이 특정 콜백을 유지해야합니까? 나는 "바인딩"속성에 대해 Srdan Rasic's post을 보았고 혼란 스러웠습니다 (아마도이 질문과 관련이 없습니다).
여러분이 솔루션을 공유 할 수 있다면 기쁩니다. 감사!
답장을 보내 주셔서 감사합니다. @ 루조. 나는 4 번 문제에 대한 해결책을 매우 영리하게 좋아했습니다! 그러나 진실에 대한 나의 탐구에서 주제 2에 대한 토론을 발견했습니다. 실제로 MVVM 패턴에 대한 더 광범위한 논의가 있었기 때문에이 StackOverflow 질문을 작성하게되었습니다. http://matteomanferdini.com/mvvm-pattern-ios-swift /). MVVM 정의 및 우수 사례에 동의하는 사람은 없습니다. 아마도 공식적인 출처로부터 구체적인 답변이 없기 때문일 것입니다. –
나는 그것을 사용하지 않는 것으로 여기에 묘사 된 것에 익숙했다 (적어도 나는 짐작한다). 뷰 모델을 단순한 객체로 만듭니다. 그들은 DataViewController를 뷰 모델이 아닌 변경을위한 드라이버로 사용합니다. 어쨌든, 내 접근 방식에서, 당신은 완전히 어떤 도주를 피할 수 있습니다. 신호를 반환하기 위해 간단하게 바인딩 할 수 있습니다. – Luzo