Supervising Controller VS Passive View

suojae·2023년 11월 25일
0

[iOS] 아키텍쳐

목록 보기
9/11

Supervising Controller와 Passive View 비교해보기


  • SupervisingView는 뷰에서 간단한 프리젠테이션 로직을 담당할 수 있지만 Passive View는 완전히 수동적인 존재로 입력값 받고 토스하고 나중에 결과를 보여주는 역할만한다

코드를 통해 비교해보기

Passive View

import UIKit

// View
class LoginViewController: UIViewController {
    var presenter: LoginPresenter!

    @IBAction func loginButtonTapped() {
        presenter.login(usernameTextField.text, passwordTextField.text)
    }

    func displayLoginResult(success: Bool) {
        // Update UI
    }
}

// Presenter
class LoginPresenter {
    func login(_ username: String?, _ password: String?) {
        // Logic to check credentials
        // Update view based on result
    }
}

Supervising Controller

import UIKit

// View
class LoginViewController: UIViewController {
    var presenter: LoginPresenter!

    @IBAction func loginButtonTapped() {
        let result = presenter.validateCredentials(usernameTextField.text, passwordTextField.text)
        // Handle basic UI logic here, like enabling/disabling buttons
        displayLoginResult(result)
    }

    func displayLoginResult(_ result: Bool) {
        // Update UI
    }
}

// Presenter
class LoginPresenter {
    func validateCredentials(_ username: String?, _ password: String?) -> Bool {
        // Logic to check credentials
    }
}

MVP 패턴 사용시 어느 것을 선택해야하는가?

Q1:: 테스터블한 코드 작성을 지향하는가?

  • 프레젠테이션 로직과 완전히 격리되어 있는 PassiveView가 적합

Q2:: 모델을 간단하게 처리하고 싶은가?

  • PassiveView는 간단한 처리라도 뷰->프리젠터->모델->프리젠터->뷰라는 사이클을 거쳐야한다
  • 모델로부터 직접 변경을 통지받는 Supervising Controller 가 적합

Q3:: 간단한 프레젠테이션 로직과 복잡한 프레젠테이션 로직을 구분하기 어려운가?

  • 누가 어떤 기준으로 간단한 프레젠테이션 로직과 복잡한 프레젠테이션 로직의 경계를 명확하게 나눌 것인가, 이런 원칙을 세울 수 없다면 나중에 다른 사람의 코드를 봤을 때도 이해하기힘들다
  • 따라서 이와같은 경우 PassiveView가 적합
profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글