Должен ли заголовок объекта типа uinavigationitem быть установлен в viewcontroller или в презентере в архитектуре MVP? - PullRequest
0 голосов
/ 21 сентября 2018

Я хотел бы знать, какой компонент архитектуры MVP должен знать и установить свойство title для типа объекта класса UINavigationItem?Это должна быть модель, презентатор или вид (UIViewController)?

1 Ответ

0 голосов
/ 21 сентября 2018

Это ответственность докладчика.Вид должен быть как можно более глупым (простым).Я думаю, что это должно выглядеть примерно так:

protocol ViewInput {
    func setup(title: String)
}

protocol ViewOutput: AnyObject {
    func viewDidLoad()
}

class Presenter: ViewOutput {
    unowned var view: ViewOutput

    init(view: ViewOutput) {
        self.view = view
    }

    func viewDidLoad() {
       view.setup(title: "Your title")
    }
}

class ViewController: UIViewController, ViewInput {
    var presenter: ViewOutput?

    override func viewDidLoad() {
       super.viewDidLoad()
       presenter.viewDidLoad()
    }

    func setup(title: String) {
       self.title = title
    }
}

Если вы напишите так, вы можете легко написать модульные тесты для заголовка представления.В тесте вы просто помещаете поддельное представление в презентатор, который реализует ViewInput и может сравнивать ожидаемый заголовок и заголовок, которые были настроены докладчиком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...