Раскадровка - Объект внутри объекта как IBOutlet - PullRequest
0 голосов
/ 25 апреля 2018

Я проходил этот хороший учебник по MVVM шаблону на примере простого вызова API. Вот окончательная структура UIViewController в Раскадровка :

enter image description here

VC:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var viewModel: ViewModel!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}  

ВМ:

import UIKit

class ViewModel: NSObject {
    @IBOutlet weak var client: ApiClient!
}

ApiClient:

import UIKit

class ApiClient: NSObject {

}  

Наблюдение:

Я узнал, что ViewModel (учитывая MVVM) никогда не должен иметь ссылку UIKit. Хотя использование Раскадровки для MVVM дает другой результат. Так как мы берем IBOutlet в ViewModel .

Запрос:

Правильно ли использовать Раскадровка и объект IBOutlet для MVVM ?

1 Ответ

0 голосов
/ 25 апреля 2018

Упоминая, что:

Я узнал, что ViewModel (учитывая MVVM) никогда не должен иметь UIKit ссылка.

кажется не всегда правильным, это не стандартное правило при создании модели представления, поэтому, если импорт UIKit требуется просто для объявления свойства как IBOutlet, это было бы неплохо .

Я считаю, что цель упоминания о том, что представление никогда не должно импортировать UIKit, заключается в том, что мы хотим точную модель представления, что означает, что мы не хотим нарушать принципы паттерна MVVM путем позволяя модели представления - непреднамеренно - позаботиться об ответственности уровня «Вид», избегая импорта UIKit в модель представления, мы можем гарантировать, что такой конфликт не произойдет; Нет сомнений, что вы, как разработчик, сможете распознать этот конфликт ...

Тем не менее, вы все еще можете удалить import UIKit из модели вида, объявив client как:

var client: ApiClient!

, не помечая его как IBOutlet, поэтому вам придется вводить его программно, а не через раскадровку.

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