대규모 뷰 컨트롤러-iOS-솔루션 대해 읽었습니다. 첫 번째 해결책 :

모든 새로운 iOS 개발자에게는 다음과 같은 문제가 있다고 확신합니다. View Controller는 다양한 목적으로 코드가 매우 빠르게 혼잡하여 500 줄 이상의 코드를 쉽게 얻을 수 있습니다.

다음은 두 가지 기본 및 공통 화면의 모습입니다.

1) 양식 화면 :
여기에 이미지 설명을 입력하십시오

2) 테이블 뷰 컨트롤러 화면
여기에 이미지 설명을 입력하십시오

지금까지 두 가지 솔루션에 대해 읽었습니다.

  1. 첫 번째 해결책 : https://bendyworks.com/single-responsibility-principle-ios/ . 이는 알림을 기반으로하며 View Controller를 (의도) View Model과 완전히 분리하여 View Controller의 코드를 줄입니다. Go-To 구조와 비슷한 코드를 깨는 단점이 있다고 생각합니다. 다음과 같이 보입니다 :
    여기에 이미지 설명을 입력하십시오

  2. 두 번째 솔루션은 동일한 붐비는 View Controller를 유지합니다 (버튼 작업은 VC 등에서 실행 됨). 그러나 TPKeyboardAvoiding , BlocksKit 또는 대부분의 카테고리에 따라 다른 솔루션 과 같은 라이브러리를 사용합니다 . 이 두 번째 솔루션을 사용하면 코드가 크게 줄어들지 만 뷰 컨트롤러에는 여전히 많은 책임이 있습니다.

이 솔루션에 대해 어떻게 생각하십니까? 어떤게 더 좋아? 더 좋은 것이 있습니까?



답변

MVVM을 사용하여이 문제를 해결할 수 있습니다.

Model-View-ViewModel 또는 MVVM 패턴은 일반적으로 UI 디자인 패턴입니다. VM은 VC에서 UI에 대한 모델 데이터 준비에 대한 모든 논리를 사용합니다.

예 :
일부 필드가있는 모델 객체가 있고 일부 필드를 형식화하고 계산하고 결합하려고합니다.

MVC의 경우 ViewController에있는 모든 논리.
MVVM에서는 모든 것을 VC에서 VM으로 옮깁니다.

VM은 UI에 대한 모든 데이터를 준비하고 VC는 이와 같이 설정합니다.

(VC 클래스에서)

self.descriptionLabel = self.viewModel.textForDescriptionLabel;

튜토리얼 및 주제 :


답변

이전에 대규모 View Controller에서 코드를 풀어야했기 때문에 처음에는 콘텐츠를 탐색 할 수 없었습니다. 내가 깨달았 던 한 가지 중요한 점은 View Controller의 크기만으로는 사물을 분리하기에 충분하지 않다는 것입니다. 하나의 큰 파일을 갖는 복잡성과 작은 파일을 많이 갖는 복잡성이 있습니다. View Controller를 작은 부분으로 나누기 위해 리팩터링해야하는 몇 가지 이유는 다음과 같습니다.

MVC

View Controller는 View와 Model을 연결하는 접착제 이상의 역할을 수행하지 않아야합니다. 많은 네트워크 연결 코드, 이미지 조작 코드 등이 있으면 도우미 클래스로 분류하는 것을 고려하십시오.

View Controller를 데이터 소스로 사용하는 다중 컨트롤

화면에 View Controller가 데이터 소스로 포함 된 많은 컨트롤이있는 경우 별도의 데이터 소스 개체로 분리하여 데이터 소스로 사용하는 것이 좋습니다. 또는 별도의 View Controller로 분리 할 수도 있습니다 (예 : View Controller에 다른 컨트롤러 외에 테이블 뷰가있는 경우 자체 테이블 뷰 컨트롤러 클래스로 분리 할 수 ​​있음).

중복 코드

다른 View Controller에 정확히 동일한 코드가 있으면 1 개의 공유 위치에 넣으십시오. 그러면 코드를 재사용하고 복잡성을 관리하는 데 도움이됩니다.

View Controller 복잡성을 최소화하기위한 몇 가지 추가 조언이 있습니다.

프로그래밍 방식이 아닌 스토리 보드

뷰 요소를 만드는 것은 많은 코드이며 프레임 지오메트리 코드도 많은 작업입니다. 자동 레이아웃 제약 조건을 사용하고 가능한 많은 스토리 요소를 스토리 보드에 배치하는 것을 고려하지 않은 경우.

불필요한 코드 / 설명

또한 불필요한 코드 / 설명을 제거하십시오. 많은 경우 새 View Controller 파일에는 사용하지 않는 메소드가 제공됩니다. 당신이 같은 방법을 사용하지 않는 경우 didReceiveMemoryWarning그것을 제거하는 것이 안전합니다. 또한 View Controller 파일이 너무 커서 때로는 오래된 코드 나 주석을 제거하는 것이 무섭습니다. 그만두 지마! 복잡성을 증가시킵니다.

알림

알림에 대한 귀하의 질문에 답변하려면 : 알림은 모든 것에 사용할 골든 해머가 아닙니다. 하나의 특정 작업으로 인해 여러 View Controller가 동시에 업데이트되어야 할 때 유용한 알림이 있습니다. 그러나 알림을 과도하게 사용하면 알림을 추적하는 데 많은 고통이 발생할 수 있습니다.


답변

VIPER (View, Interactor, Presenter, Entity and Routing)이라고하는 특별한 아키텍처가 있습니다. 나는 당신이 알아야 할 것에서 이력서를 시도 할 것입니다 :

전망

  • 그것들은 더미보기입니다.
  • UIView, UIViewController, UILabel 등과 같은 객체를 포함합니다.
  • 발표자 의 컨텐츠를 기다립니다 .
  • 사용자 상호 작용을 처리하고이를 Presenter 레이어로 전달합니다 .

증여자

  • UI 객체를 모른다;
  • 레이어 에서 입력을 얻습니다 .
  • 뷰 로직 처리 (add 메소드가 다른 화면을 표시 함);

라우팅

  • 내비게이션 로직 및 전환 애니메이션 처리
  • UINavigationController, UIWindow 등과 같은 객체를 알고 있습니다.

따라서 코드에서 정리할 내용은 다음과 같습니다.

  • 데이터 유효성 검사는 발표자 계층으로 이동합니다 .

  • 탐색은 와이어 프레임 객체로 이동합니다 ( 라우팅 레이어).

  • DRY 원리를 준수하여 뷰 컨트롤러를 분할하십시오 .

  • 복잡한 화면에는 둘 이상의보기 및 발표자가 있습니다.

VIPER 아키텍처에 대한 다음 링크를 참조하십시오
http://mutualmobile.github.io/blog/2013/12/04/viper-introduction/

행운을 빕니다!


답변